我正在处理非常大的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将其写回,如果不符合则忽略它。我能做些什么才能让它更快?
答案 0 :(得分:1)
您可以通过实现XmlReader的子类来保存步骤,其Read
方法会跳过您不感兴趣的item
元素。现在,您似乎有两个步骤:使用XmlReader
读取和过滤文档,然后使用XmlWriter
将其写入您可能会从中读取的内容。子类化XmlReader
消除了第二步;您使用子类XmlReader
作为XSLT转换或XmlDocument
或其他任何内容的输入,它永远不会构建过滤后的XML文档的中间表示。
答案 1 :(得分:0)
如果您可以编写快速正则表达式来删除它,则可以使用perl或shell脚本来替换所需的项目。这样可以避免将整个内容加载到内存中并将其写回。
答案 2 :(得分:0)
看看你是否可以使用xpath查询来确定你想要的内容并且不想用该xmldocument对象阅读....查看该类的以下方法 SelectSingleNode()返回一个XmlNode对象...... SelectNodes()返回一个XmlNodeList对象.... 看看是否有帮助......