从大型XML文件中删除节点

时间:2012-01-29 22:09:19

标签: c# xml

我有一个很大的XML文档,可以使用XmlDocument加载。我需要遍历节点的每个子节点并检查它是否有条件,然后相应删除,最后保存文档。

<root>
<node id="1">
<child delete="false"/>
</node>
<node id="2">
<child delete="true"/>
</node>
</root>

例如,我想要删除节点2,这个过程必须重复数百次。

任何帮助将不胜感激。 感谢。

修改 有人可以解释一下我是怎么做的。

3 个答案:

答案 0 :(得分:5)

您可以使用XmlReader来顺序读取您的xml(ReadOuterXml在您的情况下可能有用,一次读取整个节点)。然后使用XmlWriter写出要保留的所有节点。

答案 1 :(得分:0)

请参阅此文章,该文章比较了xml解析方法的性能 - http://www.nearinfinity.com/blogs/joe_ferner/performance_linq_to_sql_vs.html

XmlReader在这里成为赢家..

答案 2 :(得分:0)

注意,未经测试,我暂时没有使用XDocument/XElements,所以这里可能会有拼写错误

XDocument xdoc = XDocument.Load("path\\to\\file.xml");
IEnumerable<XElement> elementsToDelete = xdoc.Descendants("node")
   .Where(node => node.Descendants("child")
       .Where(child => child.Attribute("delete") != null && 
       child.Attribute("delete").Value.ToLower() == "true"));
foreach(XElement element in elementsToDelete)
    element.Remove();

xdoc.Save("path\\to\\new\\file.xml");