私は次のようなxmlドキュメントを持っています:
<Applications>
<myApp>
<add key="ErrorDestinationEventLog" value="EventLog" />
<add key="version" value="5.0.0.0" />
<add key="DebugMode_RUN" value="true" />
</myApp>
</Applications>
すべての要素の要素名は同じですが、属性が異なります。 C#でXDocumentを使用して、このxmlから特定の要素とその属性を削除するにはどうすればよいですか?
xd.Element("Applications").Element("myApp").Element(xe.Name).RemoveAll();
すべての要素が同じ名前であるため、上記のコマンドは機能しません。
名前以外に要素を識別する方法はありますか?もしそうなら、どうすればこれを使用してXDocumentから削除できますか?
string key = "version";
XDocument xdoc = XDocument.Load(path_to_xml);
xdoc.Descendants("add")
.Where(x => (string)x.Attribute("key") == key)
.Remove();
[〜#〜] update [〜#〜]あなたはほとんど仕事をしました。見逃したのは、属性値で要素をフィルタリングすることです。選択した要素をフィルタリングして削除するコードは次のとおりです。
xd.Element("Applications")
.Element("myApp")
.Elements("add")
.Where(x => (string)x.Attribute("key") == key)
.Remove();
xd.Descendants("add")
.First(a => a.Attribute("key").Value == "version")
.Remove();
myApp
の下にApplications
以外のタグがあり、add
が含まれている場合は、より安全なバージョンをお勧めします。
xd.Descendants("myApp").First()
.Descendants("add")
.Where(x => (string)x.Attribute("key") == "version")
.Remove();
XPath(System.Xml.XPath)を使用することもできます
string key="version";
xd.XPathSelectElement(String.Format("//myApp/add[@key='{0}']",key)).Remove();