这两天在看Schema,了解到如何创建。但是实际使用后觉得很疑惑。
之前对Schema的了解觉得字面意思是轮廓,可以定义XML的结构,但是同时也觉得它应该也可以成为XML文件的一个索引(是否正确?)
到CSDN搜索相关文章,看到的几乎都是询问创建XML时Schema的作用,而没有读取XML是其如何发挥作用。
而在http://www.microsoft.com/china/MSDN/library/data/xml/largexml.mspx?mfr=true这篇专门针对大体积XML文件读取的文章中,也没看到Schema的影子(我曾经以为XmlNameTable就是Schema)。
那我们是不是可以得出这么一个结论,Schema不对读取XML文件发挥作用呢?以例子来说吧:
<Objects>
    <Object>
        <Extenal>...</Extenal>
        <Internal>...</Internal>
    </Object>
    <Object>
        <Extenal>...</Extenal>
        <Internal>...</Internal>
    </Object>
</Objects>现在我只需要读取整篇文档中<External>中的内容。
1.用DOM的方式,我们可以使用GetElementsByTagName("External")来取得所有相关Element的集合,但是DOM一次性载入所有文件内容是个很恐怖的方式,尽管方法调用简便,但是完全失去了快速读取的意义;
2.用XmlReader的方式,虽然是切割式地读入内存,可实际读取的时候,是一种顺序读取,也就是说,使用XmlReader,读完</Extenal>这个标签之后,接下来会接着读<Internal>中的内容,而我希望在读取过程中能将<Internal>跳过。我原来以为Schema能够帮助实现,可是现在发现似乎不行?不知是否学艺不精,还望各位指正。

解决方案 »

  1.   

    schema 完全就是一种架构 起到约束xml的作用
    和读取之间没有任何的关系……怎么读还是要用IO ……
      

  2.   

    在.net中schema 是用于定义强类型数据集的,实际上还是在用DataSet的东西,他是以DOM方式加载XML的,DOM呢,就是一次性将文档读入内存,对于特别大的文档很消耗内存。而用XmlReader是一种仅向前的方式读取文档,处理机制和SAX一样,但处理麻烦一点。关键要看你的应用了,来决定用哪种方式。
    schema本身对读取XML文档没有实际的用途,他只起到一个约束XML文档的作用,好比“没有规矩不成方圆”。
      

  3.   

    说的简单了,就是Schema是用来限制XML文件各个节点的数据类型以及整个XML架构的。
      

  4.   

    其实我觉得Schema对读取的作用就是,验证成功后,可以直接根据验证结构,直接使用ReadStartElement(localName, uri)的方式来读取,如果是这样,似乎是能够起到部分作用。
      

  5.   

    比较流行的如xsd文件,他的作用是来定义你的xml文件结构。
      

  6.   

    Schema就是约定XML格式的,很多应用中,只能解析和读取符合指定Schema的XML文档,例如IE就只会将符合XHTML格式的XML文档当作HTML来解析呈现,其他的文档都会作为XML来呈现。
      

  7.   

    Schema用来规范Xml文档的内容及格式作用
    在读取Xml文档时,可以利用Schema来校验Xml文档是否规范。
    具体可以查看System.Xml.XmlValidatingReader类的帮助