XML元素使用Linq移植到新的后代内部到XML C#?

时间:2017-07-08 03:29:25

标签: c# xml linq-to-xml

我有这个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() );

但我认为这会让我走上错误的战略路径。

所有的想法都表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:2)

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

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