删除XML中的元素
本文关键字:元素 XML 删除 | 更新日期: 2023-09-27 18:16:47
我尝试在Xml中删除一个元素,但目前我只是删除"子元素"XML:
<dependency>
<dependentAssembly dependencyType="preRequisite">
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install">
</dependentAssembly>
当前代码:string filePath = "C:''Example''Example.exe.manifest"
var xml = XElement.Load(filePath);
xml.Descendants().Where(x => x.Name.LocalName == "dependentAssembly" && (string)x.Attribute("dependencyType") == "install").Remove();
xml.Save(filePath);
Xml后代码:
<dependency>
<dependentAssembly dependencyType="preRequisite">
</dependentAssembly>
</dependency>
<dependency>
</dependency>
正如你所看到的,我目前只是删除<dependentAssembly>
,但我试图删除<dependency>
我该怎么做呢?
我从来没有在XML中做过那么多,所以我试着向你们学习:)
两个选项。您可以选择要删除的父节点:
xml.Descendants()
.Where(x => x.Name.LocalName == "dependentAssembly" &&
(string)x.Attribute("dependencyType") == "install")
.Select(x => x.Parent)
.Remove();
或者您可以使用Any
来查找具有此类子元素的元素:
xml.Descendants()
.Where(p => p.Elements()
.Any(x => x.Name.LocalName == "dependentAssembly" &&
(string)x.Attribute("dependencyType") == "install")))
.Remove();
我还强烈建议不要用LocalName
匹配,而是找出您想要的完整的名称空间限定元素名称,例如
XNamespace ns = "http://somenamespace";
xml.Descendants(ns + "dependency")
.Where(p => p.Elements(ns + "dependentAssembly")
.Any(x => (string)x.Attribute("dependencyType") == "install")))
.Remove();
对于当前的语句,您只是选择了dependentAssembly和具有要安装的依赖属性的节点。您需要的是包含这样一个节点的父节点。因此,我建议将您的语句修改为:
xml.Descendants().Where(x => x.Name.LocalName == "dependentAssembly" && (string)x.Attribute("dependencyType") == "install").Select(x => x.Parent).Remove();
希望这能解决你的问题。