XML元素删除,只需要删除一个元素而不是父元素
本文关键字:元素 删除 一个 XML | 更新日期: 2023-09-27 18:27:01
基本上,我要做的是从列表中删除一个VSLOC。我不想删除所有属于它的东西。
<?xml version="1.0"?>
<GarageNumbers>
<G554>
<id>G554</id>
<VSLOC>V002</VSLOC>
<VSLOC>V003</VSLOC>
<VSLOC>V002</VSLOC>
</G554>
<G566>
<id>G566</id>
<VSLOC>V002</VSLOC>
<VSLOC>V003</VSLOC>
<VSLOC>V002</VSLOC>
</G566>
<G572>
<id>G572</id>
<VSLOC>V001</VSLOC>
<VSLOC>V002</VSLOC>
</G572>
</GarageNumbers>
所以,我设置的是一个组合框,我从中选择一个G#,在列表框中显示与它相关的所有VSLOC。我需要做的是从列表框中选择一个项目,并使用按钮从列表框和xml文档中删除该行。我有所有这些设置,但当我按下按钮时,它会删除G554和所有带有的元素。
因此,如果我想从G554中的列表中选择V002,我希望它只删除带有内文的VSLOC。
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Application.StartupPath + "/xmlData.xml");
foreach (XmlNode xNode in xDoc.SelectNodes("GarageNumbers/G554"))
if (xNode.SelectSingleNode("VSLOC").InnerText == "V002")
xNode.ParentNode.RemoveChild(xNode);
xDoc.Save(Application.StartupPath + "/xmlData.xml");
您应该能够深入到所需的元素,然后删除它们。例如,假设您的XML位于XElement
中,则这种方法会起作用:
string targetCategory = "G554";
string vsloc = "V002";
xml.Element(targetCategory)
.Elements("VSLOC")
.Where(e => e.Value == vsloc)
.Remove();
如果使用的是XDocument
,则添加Root
属性:xml.Root
var xDoc = XDocument.Load(fname);
var node = xDoc.Descendants("VSLOC")
.Where(e => (string)e.Parent.Element("id") == "G554")
.FirstOrDefault();
if (node != null) node.Remove();
xDoc.Save(fname);