如何从xml c#中删除节点?

时间:2012-12-13 10:43:12

标签: c# asp.net xml c#-4.0 linq-to-xml

我有一个像这样的xml结构: -

<Person id="1" Name="Rahul lamba" Manager_Id="13" Department="IT" />
<Person id="6" Name="Saurabh" Manager_Id="4" Department="IT" />
<Person id="5" Name="Amitesh" Manager_Id="6" Department="IT" />

现在我想从每行删除XML中的 Manager_Id 节点。

我尝试了这个,但没有任何效果

XmlNodeList l = doc.GetElementsByTagName("Person");

 foreach (XmlNode item in l)
     {
         foreach (var  item1 in item.ChildNodes)
             {
                 if (item1 == "Manager_Id")
                     {
                        //Code to remove Manager_Id node.
                     }
             }
      }

我怎样才能实现这个目标?

提前完成。

2 个答案:

答案 0 :(得分:3)

您可以使用Linq To Xml轻松完成,

var xDoc = XDocument.Parse(xmlstring); //XDocument.Load(filename)

xDoc.Descendants("Person")
    .Select(x => x.Attribute("Manager_Id"))
    .Where(x => x!=null)
    .ToList().ForEach(a => a.Remove());

var newxml = xDoc.ToString(); //xDoc.Save(fileName);

答案 1 :(得分:0)

XmlTextReader reader = new XmlTextReader(@"C:\MyXml.xml");
        reader.Read();
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        XmlNode node = doc.SelectSingleNode("/Persons/Person[@Manager_Id=6]");
        node.ParentNode.RemoveChild(node);
        reader.Close();
        doc.Save(@"D:\MyXml.xml"); 

删除所有带att的节点

XmlTextReader reader = new XmlTextReader(@"C:\MyXml.xml");
        reader.Read();
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        XmlNodeList lstNode = doc.SelectNodes("/Persons/Person[@Manager_Id]");
        foreach (XmlNode node in lstNode)
        {
            node.ParentNode.RemoveChild(node);
        }
        reader.Close();
        doc.Save(@"C:\MyXml.xml");