XPathDocument与XmlDocument

时间:2011-08-21 02:06:45

标签: c# .net asp.net xml linq-to-xml

我正在开发ASP.NET中的博客引擎,并且实现了一个存储库以使用XML文件作为数据存储。 XML存储库主要用于本地使用和测试目的。现在虽然它可能不是今天拥有大量可用内存和处理能力的计算机的问题,但我想了解一些具体细节:

  • XPathDocument是只读文档,而XmlDocument是读/写文档。因此,XPathDocument是否比XmlDocument更轻量级,因为它缺乏编写功能?
  • 我确信当您使用XmlDocument加载XML文档时,它会将整个文档加载到内存中,如果文档大小很大,则可能会出现问题。 XPathDocument做同样的事情吗?如果是这样,如何在不首先将整个文档加载到内存中的情况下从XML文档中读取单个节点或一组节点?我知道我可以使用XmlTextReader,但这意味着我必须在顺序访问节点时解析整个文档。我希望能够使用XPath表达式查询XML文档。

无论如何,如果对象图的大小差别不大(XmlDocument和XPathDocument),那么完成工作就不会有什么坏处,但是我想在这里实现最好的解决方案。

1 个答案:

答案 0 :(得分:6)

XPathDocument也将完整的文档读入内存,这需要支持all the XPath axes像前兄弟,前一个,祖先,父,子,后代,后续兄弟,跟随。

如果要在不将整个文档加载到内存中的情况下执行XPath或XQuery查询,则必须查看专用的XML数据库,或者至少使用支持XQuery的XML数据类型的SQL数据库。例如,MS SQL服务器有an XML data type,并支持一些(在我看来相当有限)XQuery版本。