Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#linq XML深度比较和标记移除_C#_.net_Xml_Linq - Fatal编程技术网

C#linq 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

我试图从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().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();

您不使用xnamespace
http://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();