从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> 

从XML文件中删除所有艺术家节点

只要文件不是千兆字节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被调用之前操作它将要写的内容。

恐怕你想做的事可能是不可能的。XmlWriter并不打算在XML写入目标流之前对其进行操作。