LINQ to XML新手:将节点从一个节点移动到另一个节点

问候!

我有一个包含以下内容的XElement对象:

                               

我想将Foo的2和3移动到ID为“C”的SubSection,结果是:

                                

将Foo部分“2”和“3”移动到“C”子部分的最佳方法是什么?

您需要通过以下查询获取Foo第2和第3部分:

 var foos = from xelem in root.Descendants("Foo") where xelem.Attribute("id").Value == "2" || xelem.Attribute("id").Value == "3" select xelem; 

然后迭代该列表并将其从父母中删除

 xelem.Remove(); 

然后只需将它们添加到正确的节点:

 parentElem.Add(xelem); 

第一个查询将获取两个部分,然后删除并将每个部分添加到树上的正确位置。

这是一个完整的解决方案:

 var foos = (from xElem in xDoc.Root.Descendants("Foo") where xElem.Attribute("id").Value == "2" || xElem.Attribute("id").Value == "3" select xElem).ToList(); var newParentElem = (from xElem in xDoc.Root.Descendants("SubSection") where xElem.Attribute("id").Value == "C" select xElem).Single(); foreach(var xElem in foos) { xElem.Remove(); newParentElem.Add(xElem); } 

之后你的xDoc应该有正确的树。