I try to delete an element in Xml but currently im just removing the "sub-element" XML:
<dependency>
<dependentAssembly dependencyType="preRequisite">
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install">
</dependentAssembly>
Current Code:
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 after Code:
<dependency>
<dependentAssembly dependencyType="preRequisite">
</dependentAssembly>
</dependency>
<dependency>
</dependency>
As you see im currently just deleting <dependentAssembly>
but i try to delete <dependency>
How shall i do That?
i never did that much in XML so i try to learn from you guys :)
Two options. You could select the parent node to remove:
xml.Descendants()
.Where(x => x.Name.LocalName == "dependentAssembly" &&
(string)x.Attribute("dependencyType") == "install")
.Select(x => x.Parent)
.Remove();
Or you could use Any
to find elements with any such child:
xml.Descendants()
.Where(p => p.Elements()
.Any(x => x.Name.LocalName == "dependentAssembly" &&
(string)x.Attribute("dependencyType") == "install")))
.Remove();
I would also strongly recommend not matching by LocalName
, but instead working out the full namespace-qualified element name you want, e.g.
XNamespace ns = "http://somenamespace";
xml.Descendants(ns + "dependency")
.Where(p => p.Elements(ns + "dependentAssembly")
.Any(x => (string)x.Attribute("dependencyType") == "install")))
.Remove();
See more on this question at Stackoverflow