这两天在看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能够帮助实现,可是现在发现似乎不行?不知是否学艺不精,还望各位指正。
之前对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能够帮助实现,可是现在发现似乎不行?不知是否学艺不精,还望各位指正。
和读取之间没有任何的关系……怎么读还是要用IO ……
schema本身对读取XML文档没有实际的用途,他只起到一个约束XML文档的作用,好比“没有规矩不成方圆”。
在读取Xml文档时,可以利用Schema来校验Xml文档是否规范。
具体可以查看System.Xml.XmlValidatingReader类的帮助