2

基本上我要做的是从列表中删除一个 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 和所有带有 in 的元素。

因此,如果我想从 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");
4

2 回答 2

2

您应该能够深入了解所需的元素,然后将其删除。例如,假设您的 XML 在一个 中XElement,这种方法可以工作:

string targetCategory = "G554";
string vsloc = "V002";

xml.Element(targetCategory)
   .Elements("VSLOC")
   .Where(e => e.Value == vsloc)
   .Remove();

如果您使用的是XDocument然后添加Root属性:xml.Root

于 2013-08-08T21:27:32.363 回答
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);
于 2013-08-08T21:29:07.737 回答