C#linq XML深度比较和标记移除
我试图从XML中删除一个名为C#linq XML深度比较和标记移除,c#,.net,xml,linq,C#,.net,Xml,Linq,我试图从XML中删除一个名为的特定元素,以便比较它们 我试过这些方法,但都没有用。它编译得很好,但不起作用 doc1.Root.Element("document").Descendants().Where(e=>e.Name == "source").Remove(); doc1.Root.Element("document").Elements().Where(e=>e.Name == "source").Remove(); doc2.Root.Elements().Wh
的特定元素,以便比较它们
我试过这些方法,但都没有用。它编译得很好,但不起作用
doc1.Root.Element("document").Descendants().Where(e=>e.Name == "source").Remove();
doc1.Root.Element("document").Elements().Where(e=>e.Name == "source").Remove();
doc2.Root.Elements().Where(e=>e.Name == "source").Remove();
doc1.Descendants("document").Where(e=>e.Name == "source").Remove();
任何人都知道我做错了什么。您没有考虑xmlnamespace
看看这个简单的例子
string xml1 = "<document> </document>";
var elem1 = XDocument.Parse(xml1).Element("document"); //elem1 contains document
elem2现在为空
如何解决?使用XNamespace
最后是一个更复杂的示例(请参阅XmlNamespace的用法):
string xml4=”“;
XNS=”http://aaa";
var elems4=XDocument.Parse(xml4).Element(ns+“document”).subjects(ns+“subsubsubitem”)
.ToList();
您不使用xnamespacehttp://www.nuance.com/omnipage/xml/ssdoc-schema3.xsd
是的,我正在保存它,只是我没有在这里发布代码。这就是为什么我知道文件还没有删除元素的原因。不使用xnamespace是什么意思?我现在无法更改xml中的内容,因为有很多内容。@Krom我发布了一个答案我相信我要用\替换名称空间,用“”是否正确?我不确定第一个从何而来。这也是返回的对象不是对象的实例code
doc1.Element(“document”).Element(“page”).Element(“description”).Element(“source”).Remove()code
除了名称空间问题之外,xdocument.parse是否将忽略名称空间定义之前的xml版本和注释@L.B
string xml2 = "<document xmlns=\"http://aaa\"> </document>";
var elem2 = XDocument.Parse(xml2).Element("document"); //elem2 is null
XNamespace ns = "http://aaa";
var elem3 = XDocument.Parse(xml2).Element(ns + "document"); //elem3 contains document
string xml4 = "<document xmlns=\"http://aaa\"> <subitem> <subsubitem> </subsubitem> </subitem> </document>";
XNamespace ns = "http://aaa";
var elems4 = XDocument.Parse(xml4).Element(ns + "document").Descendants(ns + "subsubitem")
.ToList();