我有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>
答案 0 :(得分:0)
ImportNode()
(请注意方法名称末尾缺少s
)需要单个节点,而不是{{1}中的节点列表}}。此外,如果您希望输出中的节点按顺序排列,则需要在使用$testNodes
时以相反顺序插入节点。
InsertAfter()