如何使用的XDocument删除从XML元素时,我们有相同的名字,但不同属性的多个元素(How to

2019-08-03 14:43发布

我有一个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删除吗?

Answer 1:

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();


Answer 2:

xd.Descendants("add")
    .First(a => a.Attribute("key").Value == "version")
    .Remove();

如果您有其他代码myAppApplications包含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();


文章来源: How to remove an element from an xml using Xdocument when we have multiple elements with same name but different attributes