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>

それで、私がセットアップしたのは、リストボックスに関連付けられているすべての VSLOC を表示する G# を選択するコンボボックスです。私がする必要があるのは、リスト ボックスから項目を選択し、ボタンを使用してリスト ボックスと 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");
4

2 に答える 2

2

目的の要素までドリルダウンして削除できるはずです。たとえば、XML が にあると仮定するとXElement、次のアプローチが機能します。

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

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

を使用している場合は、プロパティXDocumentを追加します。Rootxml.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 に答える