如何移动所有具有相同名称的节点并在firstchild之后追加

时间:2018-03-22 16:00:50

标签: xml powershell xml-parsing

我有2个XML文件,我将节点从File2导入到File1。 File2具有相同的元素,因此当我使用节点名称使用selectNodes时,所有节点都不会移动,相反,我收到此错误:

Exception calling "InsertAfter" with "2" argument(s): "The reference node is not a child of this node."

当我使用SelectSingleNode("//*[contains(@id,'1')]")单独选择具有相同名称的每个节点时,它可以正常工作。有没有办法可以一次性移动所有这些?我想我可能需要在循环视角中更多地看待它,而不是单独进行。

$file1 = [xml](Get-Content "file1.xml")
$file2 = [xml](Get-Content "file2.xml")

$testNodes= $file2.root.test
$contentAdd= $file1.root

$ammendOutcome = $file1.ImportNode($testNodes, $TRUE)
$contentAdd.InsertAfter($ammendOutcome, $contentAdd.FirstChild)

示例文件1:

<root>
    <child1 />
</root>

示例文件2:

<root>
    <test id="1" />
    <test id ="2" />
    <test id ="3">
        <update score="1" />
    </test>
</root>

期待:

<root>
    <child1 />
    <test id="1" />
    <test id ="2" />
    <test id ="3">
        <update score="1" />
    </test>
</root>

1 个答案:

答案 0 :(得分:0)

ImportNode()(请注意方法名称末尾缺少s)需要单个节点,而不是{{1}中的节点列表}}。此外,如果您希望输出中的节点按顺序排列,则需要在使用$testNodes时以相反顺序插入节点。

InsertAfter()