XML 使用 Linq 将元素移入新后代到 XML C#?

XML Elements Move Inside New Descendant with Linq to XML C#?

我有这个 XML 文档:

<aaa>
    <x1></x1>
    <x2></x2>
    <x3></x3>
</aaa>

需要转换成这个文件:

<aaa>
    <bbb note="moved to new">
        <x1></x1>
        <x2></x2>
        <x3></x3>   
    </bbb>
</aaa>

使用 Linq-to-XML,将 的所有子节点添加到新后代的正确代码是什么,但前提是后代不存在?我从这个开始

var docRaw = XElement.Parse( documentString );
var bbbElem = docRaw.Elements( "aaa" ).Where( docRaw => !docRaw.Elements( "bbb" ).Any() );

但我认为这让我走错了战略路径。

感谢所有想法,谢谢。

您可以使用ReplaceNodes()替换根元素的内容。您可以将它们替换为名为 <bbb> 的新节点,该节点包含根的先前子元素。

doc.Root.ReplaceNodes(
    new XElement("bbb",
        new XAttribute("note", "moved to new"),
        doc.Root.Elements()
    )
);