XPathDocument是否加载整个xml文档?

时间:2010-04-09 18:04:26

标签: c# xml xpath

如果我这样做

XPathDocument doc = new XPathDocument("filename.xml");

是否将整个文档加载到内存中?我正在编写一个手机应用程序,该文档可能会存储大量不需要同时加载的数据。手机通常没有太多的内存!

5 个答案:

答案 0 :(得分:5)

是的,整个XML文档都在内存中表示

一种解决方案是将大型XML文档拆分为许多较小的文档。

或者,您也可以编写自己的XmlReader来忽略不需要的子树。您可以将此XmlReader作为参数传递给XpathDocument()构造函数 - 需要将其伪装为TextReader

答案 1 :(得分:2)

您可能想要更像System.Xml.XmlReader的内容。

答案 2 :(得分:1)

https://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx

“使用XPath数据模型提供XML文档的快速,只读,内存中表示。”

答案 3 :(得分:1)

您可能希望查看LINQ to XML的XStreamingElement

  

表示支持延迟流输出的XML树中的元素。

     

此类允许您创建XML   支持延迟流式传输的树   输出。您可以使用此类进行创建   一个非常类似的XML树   使用创建XML树   的XElement。但是,有一个   根本区别。当你使用   LINQ查询指定内容的时候   使用XElement创建XML树,   查询变量在。处迭代   构建XML树的时间,   并添加了查询结果   到XML树。相比之下,当你   使用创建XML树   XStreamingElement,对它的引用   查询变量存储在XML中   树没有被迭代。查询   仅在序列化时迭代。   这允许您创建更大的XML   树木虽然保持较小   记忆足迹。

     

如果您是从输入流式传输   来源,如文本文件,然后你   可以读取一个非常大的文本文件,和   生成一个非常大的XML文档   同时保持小记忆   足迹。

答案 4 :(得分:-1)

您可能想尝试其他构造函数XPathDocument(stream)。流式传输文档不会占用太多内存。

也许你不想看看Linq to XML,因为与使用SAX / DOM解析相比,编码和制作更漂亮的代码更容易,更快。请参阅此帖子:How to Store data without using Database and how to retrieve them?

相关问题