删除XML文件中的节点

时间:2016-03-11 10:57:38

标签: c#

我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
 <WebServices>
  <WebService>
   <Name>ServiceA</Name>
   <Uri>http://localhost:53683/api/home</Uri>
  </WebService>

  <WebService>
   <Name>ServiceB</Name>
   <Uri>http://localhost:50043/api/home</Uri>
  </WebService>
 </WebServices>

我想按名称删除节点。 我的代码不起作用。

 XDocument document = XDocument.Load(this.Path);
 //xDoc.Element("WebServices").Element("WebService").Elements("Name").Where(node => node.Value == "Name1").Remove();
   document.Save(this.Path);

它仅删除WebService中的“Name”节点。我想从“WebServices”中删除“WebService”节点。 任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

嗯,您已经选择了子元素 - 所以您只需要选择其父元素:

xDoc.Root
    .Elements("WebService")
    .Elements("Name")
    .Where(node => node.Value == "Name1")
    .Select(node => node.Parent)
    .Remove();

或者您可以更改Where来电:

xDoc.Root
    .Elements("WebService")
    .Where(ws => (string) ws.Element("Name") == "Name1")
    .Remove();

答案 1 :(得分:0)

您可以使用xPath

XElement element = document.XPathSelectElement("//WebService[Name = 'ServiceA']");
element.Romove();

答案 2 :(得分:0)

您可以尝试使用linq to xml

XDocument doc = XDocument.Load("input.xml");
var q = from node in doc.Descendants("Setting")

let attr = node.Attribute("name")
where attr != null && attr.Value == "File1"

select node;
q.ToList().ForEach(x => x.Remove());
doc.Save("output.xml");

或以下

XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNodeList nodes = doc.SelectNodes("//Setting[@name='File1']");

for (int i = nodes.Count - 1; i >= 0; i--)
{
 nodes[i].ParentNode.RemoveChild(nodes[i]);
}
doc.Save(path);

如果你需要一个课程才能删除,你也可以尝试下面的

private static void DeleteXmlNode(string path, string tagname, string searchconditionAttributename, string searchconditionAttributevalue)
{
    XmlDocument doc = new XmlDocument();
    doc.Load(path); 
    XmlNodeList nodes = doc.GetElementsByTagName(tagname);\
   //XmlNodeList nodes = doc.GetElementsByTagName("user");
    foreach (XmlNode node in nodes)
    {
        foreach (XmlAttribute attribute in node.Attributes)
        {
            if ((attribute.Name == searchconditionAttributename) && (attribute.Value == searchconditionAttributevalue))
            //if ((attribute.Name == "name") && (attribute.Value == "aaa"))
            {
                //delete.
                node.RemoveAll();
                break;
            }
        }
    }
    //save xml file.
    doc.Save(path);
}