从XML文件中删除所有艺术家节点
本文关键字:艺术家 节点 删除 XML 文件 | 更新日期: 2023-09-27 17:49:29
我有一个XmlWriter,它包含如下所示的xml,只是有更多的节点。从xml中删除所有ARTIST节点的最快和最好的方法是什么?
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
</CD>
</CATALOG>
只要文件不是千兆字节XmlDocument应该没问题:
XmlDocument XDoc = new XmlDocument();
XDoc.Load(MapPath(@"~'xml'test.xml"));
XmlNodeList Nodes = XDoc.GetElementsByTagName("ARTIST");
foreach (XmlNode Node in Nodes)
Node.ParentNode.RemoveChild(Node);
XDoc.Save(MapPath(@"~'xml'test_out.xml"));
当我尝试Steve的解决方案时,我收到以下错误"元素列表已更改。枚举操作无法继续"。我知道这有点麻烦,但为了解决这个问题,我使用了以下命令:
//Load XML
XmlDocument XDoc = new XmlDocument();
XDoc.Load(MapPath(@"~'xml'test.xml"));
//Get list of offending nodes
XmlNodeList Nodes = XDoc.GetElementsByTagName("ARTIST");
//Loop through the list
while (Nodes.Count != 0) {
foreach (XmlNode Node in Nodes) {
//Remove the offending node
Node.ParentNode.RemoveChild(Node); //<--This line messes with our iteration and forces us to get a new list after each remove
//Stop the loop
break;
}
//Get a refreshed list of offending nodes
Nodes = XDoc.GetElementsByTagName("ARTIST");
}
//Save the document
XDoc.Save(newfile);
我在困境中,需要一些快速的东西,这使工作完成。
从你的问题措辞的方式来看,我假设你有一个XmlWriter已经被用来编写XmlDocument,并且你想在flush
被调用之前操作它将要写的内容。