1

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>

如果我是正确的,请告诉我如何将这些元素插入到上述新文档中,否则请告诉我解决此问题的方法。提前致谢。

4

3 回答 3

1

您可以将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());
于 2013-10-21T07:49:08.947 回答
0

现在通过这个 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
 }
于 2013-10-21T07:01:15.253 回答
0

不会删除根节点,同时删除其所有子节点吗?我认为你得到的结果是可以预料的。您可能应该获取根的所有孩子并将它们复制到您的新文档中。

于 2013-10-21T07:01:16.893 回答