我的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”节点。 任何人都可以帮忙吗?
答案 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);
}