我尝试使用PowerShell在现有节点之前插入新节点,但是我收到以下错误:
异常调用" InsertBefore"用" 2"参数:"参考节点不是该节点的子节点。"
我的XML文档的结构是
<config>
<services>
<serviceType1>
<id>uniqueKey_1</id>
<val>nonUniqueValue</val>
</serviceType1>
<serviceType1>
<id>uniqueKey_2</id>
<val>nonUniqueValue</val>
</serviceType1>
<serviceType2>
<id>uniqueKey_4</id>
<val>nonUniqueValue</val>
</serviceType2>
<serviceType2>
<id>uniqueKey_5</id>
<val>nonUniqueValue</val>
</serviceType2>
</services>
</config>
XML文档可以包含任意数量的serviceType1 \ 2节点,我必须通过id识别它们的唯一方法。
我想要实现的目标如下:
<config>
<services>
<serviceType1>
<id>uniqueKey_1</id>
<val>nonUniqueValue</val>
</serviceType1>
<serviceType1>
<id>uniqueKey_2</id>
<val>nonUniqueValue</val>
</serviceType1>
<serviceType1>
<id>uniqueKey_3</id>
<val>nonUniqueValue</val>
</serviceType1>
<serviceType2>
<id>uniqueKey_4</id>
<val>nonUniqueValue</val>
</serviceType2>
<serviceType2>
<id>uniqueKey_5</id>
<val>nonUniqueValue</val>
</serviceType2>
</services>
</config>
是在具有子ID&#34; uniqueKey_4&#34;的serviceType2节点之前插入另一个包含它的子节点的serviceType1。
同样,我唯一的参考点是id值。
我的代码是;
$missingNode = "serviceType1"
$newElement = $myXMLDoc.CreateElement($missingNode)
$myXMLDoc.DocumentElement.InsertBefore($newElement,$myXMLDoc.SelectSingleNode("//id[.='uniqueKey_4']").ParentNode)
我认为(错误地看来)SelectSingleNode(...).ParentNode
会通过id给我一个serviceType2节点的引用。
答案 0 :(得分:0)
@PetSerAl试图告诉您的是,您需要在要插入新节点的节点的父节点上调用InsertBefore()
方法。在您的情况下,不是DocumentElement
节点(即<config>
),而是它的子节点<services>
。
将您的上一个陈述更改为以下内容:
$myXMLDoc.DocumentElement.services.InsertBefore($newElement, $myXMLDoc.SelectSingleNode("//id[.='uniqueKey_4']").ParentNode)
或者像这样:
$myXMLDoc.SelectSingleNode('//services').InsertBefore($newElement, $myXMLDoc.SelectSingleNode("//id[.='uniqueKey_4']").ParentNode)