大型XML文件炸毁内存,我该如何减少?

时间:2015-05-20 14:22:47

标签: .net xml vb.net xpath

我有一个200MB的文件,我需要循环并检索所有唯一的xpath。有了这种设置:

<?xml version="1.0" encoding="utf-8"?>
<invoice>
    <id>123</id>
    <newRa elem="0">
        <createD>20150519</createD>
        <modD>12345</modD>
    </newRa>
    <total>123.99</total>
</invoice>
<invoice>
    <id>456</id>
    <newRa elem="0">
        <createD>20150518</createD>
        <modD>12345</modD>
    </newRa>
    <total>456.99</total>
</invoice>
<invoice>
    <id>789</id>
    <newRa elem="0">
        <createD>20150517</createD>
        <modD>12345</modD>
    </newRa>
    <total>789.99</total>
</invoice>

我想要浏览每个发票一次,获取一个唯一的xpath列表,并将它们存储在stringcollection中。

当我遍历所有发票元素时,我想在遇到新的xpath时仅添加到stringcollection。

由于某些限制(即VisualStudio2005,.NET 2.0 Framework)无法使用LINQ以及其他许多可以轻松解决此问题的功能,因此难以理解这一点。

1 个答案:

答案 0 :(得分:2)

对于此类文件,您应该基于XmlTextReader创建一个解析器类。它是一个拉解析器实现。

使用XmlTextReader,您必须逐节点读取整个XML节点并提取任务所需的内容。在这里,您必须通过跟踪嵌套元素和位置计数来自己构建XPath查询字符串。