Как удалить элемент из xml с помощью Xdocument, когда у нас есть несколько элементов с одинаковым именем, но разными атрибутами
у меня есть xml-документ, который выглядит так:
<Applications>
<myApp>
<add key="ErrorDestinationEventLog" value="EventLog" />
<add key="version" value="5.0.0.0" />
<add key="DebugMode_RUN" value="true" />
</myApp>
</Applications>
все элементы имеют одинаковое имя, но разные атрибуты. Как удалить один конкретный элемент и его атрибуты из этого xml с помощью XDocument в C#?
xd.Element("Applications").Element("myApp").Element(xe.Name).RemoveAll();
приведенная выше команда не работает, так как все элементы имеют одинаковое имя.
есть ли способ идентифицировать элемент, кроме его имени? И если да, то как я могу использовать это, чтобы удалить его из XDocument используется?
2 ответов
string key = "version";
XDocument xdoc = XDocument.Load(path_to_xml);
xdoc.Descendants("add")
.Where(x => (string)x.Attribute("key") == key)
.Remove();
обновление вы почти все сделали. Вы пропустили фильтрацию элементов по значению атрибута. Вот ваш код с фильтрацией и удалением выбранных элементов:
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();