使用.net从大型XML文件中删除节点的最快方法是什么?

时间:2010-01-11 18:00:31

标签: xml performance parsing

我正在处理非常大的XML文件(100个MB)。这棵树很简单

<items>
  <item>
    <column1>ABC</column1>
    <column2>DEF</column2>
  </item>
  <item>
    <column1>GHI</column1>
    <column2>KLM</column2>
  </item>
</items>

我需要解析此文档,并删除一些<item>元素。到目前为止,我实现的最佳同步性是使用XmlReader,缓存内存中的每个<item>,如果符合条件则使用XmlWriter将其写回,如果不符合则忽略它。我能做些什么才能让它更快?

3 个答案:

答案 0 :(得分:1)

您可以通过实现XmlReader的子类来保存步骤,其Read方法会跳过您不感兴趣的item元素。现在,您似乎有两个步骤:使用XmlReader读取和过滤文档,然后使用XmlWriter将其写入您可能会从中读取的内容。子类化XmlReader消除了第二步;您使用子类XmlReader作为XSLT转换或XmlDocument或其他任何内容的输入,它永远不会构建过滤后的XML文档的中间表示。

答案 1 :(得分:0)

如果您可以编写快速正则表达式来删除它,则可以使用perl或shell脚本来替换所需的项目。这样可以避免将整个内容加载到内存中并将其写回。

答案 2 :(得分:0)

看看你是否可以使用xpath查询来确定你想要的内容并且不想用该xmldocument对象阅读....查看该类的以下方法 SelectSingleNode()返回一个XmlNode对象...... SelectNodes()返回一个XmlNodeList对象.... 看看是否有帮助......