无法使用 linq to xml c# 从 xml 文档中删除根节点
本文关键字:xml 文档 删除 根节点 linq to | 更新日期: 2023-09-27 18:36:22
Actullay,我需要从第一个xml文档中获取除根节点以外的所有元素,以便我可以将它们作为子节点插入到新文档中的元素(与以前的文档的根名称相同)。所以我尝试了各种方法来实现它,其中之一是首先删除根节点,然后尝试将元素添加到新节点中,如下所示:
我尝试了以下方法,但无法实现。
XDocument testDoc = XDocument.Parse(Mydocument);
testDoc.Descendants().Where(e => e.Name.LocalName == "rootName").Select(m=>m).Single().Remove();
var resultDoc = testDoc;
上面的代码给了我一个空的"{}"结果。
我的XML文档看起来像下面的
: <rootName xsi:schemaLocation="" xmlns:xsi="" xmlns="">
<main>
<child>
</child>
<anotherchild>
</anotherchild>
</main>
</rootName>
另一种方法是获取第一个文档的所有元素,如下所示:
var resultDoc = testDoc.Descendants(ns + "rootName").Elements();
上面的陈述给了我"testDoc"中的元素列表,其中我需要做下面这样的事情,我一无所知:
<AnotherDocument xsi:schemaLocation="" xmlns:xsi="" xmlns="">
<firstNode>
<rootName>
<main>
<child>
</child>
<anotherchild>
</anotherchild>
</main>
</rootName>
</firstNode>
如果我是正确的,请让我知道如何在上述新文档中插入这些元素,否则请告诉我解决此问题的方法。提前谢谢。
您可以将另一个文档中rootName
元素的内容替换为第一个文档根目录中的元素:
var xDoc = XDocument.Parse(Mydocument);
var anotherXDoc = XDocument.Load("anotherdata.xml");
XNamespace ns = "http://..."; // your xml namespance
var rootName = anotherXDoc.Descendants(ns + "rootName").First();
rootName.ReplaceNodes(xDoc.Root.Elements());
通过这个page_nodes获取所有节点,现在你可以为每个循环使用所有节点
var page_nodes = from p in xdoc.Descendants.Where(e => e.Name.LocalName == "rootName").Select(m=>m).Single().Remove() select p;
foreach (var page_node in page_nodes)
{
//Do stuff
}
删除根节点,是否也会删除其所有子节点?我认为你得到的结果是意料之中的。您可能应该获取根的所有子级并将它们复制到新文档中。