基本上我要做的是从列表中删除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");
答案 0 :(得分:2)
您应该能够深入查看所需的元素,然后将其删除。例如,假设您的XML位于XElement
,这种方法可行:
string targetCategory = "G554";
string vsloc = "V002";
xml.Element(targetCategory)
.Elements("VSLOC")
.Where(e => e.Value == vsloc)
.Remove();
如果您使用的是XDocument
,请添加Root
媒体资源:xml.Root
答案 1 :(得分:1)
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);