在PowerShell上将节点从一个XML导入到另一个XML
我需要将名为ProjectOptions的节点从default.xml复制到original.xml,而不修改任何其他内容: Original.xml在PowerShell上将节点从一个XML导入到另一个XML,xml,powershell,Xml,Powershell,我需要将名为ProjectOptions的节点从default.xml复制到original.xml,而不修改任何其他内容: Original.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <KEYS> <KEY ObjectName="computername_user" RegObjectType="0"> <KEYS> <KEY Object
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<KEYS>
<KEY ObjectName="computername_user" RegObjectType="0">
<KEYS>
<KEY ObjectName="Desktop" RegObjectType="0">
<KEYS>
<KEY ObjectName="Settings" RegObjectType="0">
<KEYS>
<KEY ObjectName="PrinterDefault" RegObjectType="0">
<VALUES>
<VALUE ObjectName="PrinterOrientation" Value="2" ValueType="4" />
</VALUES>
</KEY>
<KEY ObjectName="ProjectOptions" RegObjectType="0">
<VALUES>
<VALUE ObjectName="ShowWelcomeMsg" Value="0" ValueType="4" />
</VALUES>
</KEY>
</KEYS>
</KEY>
</KEYS>
</KEY>
</KEYS>
</KEY>
</KEYS>
但它以引用节点不是此节点的子节点结束。
请告诉我哪里出错了。
谢谢。您尝试在DocumentElement节点下插入导入的节点,但$Child不是该节点的直接子元素。您需要在$Child的父节点上调用InsertAfter方法 更改此项:
$xml.DocumentElement.InsertAfter($XML.ImportNode($xmld.SelectSingleNode("//KEY[@ObjectName = 'ProjectOptions']"), $true), $Child)
为此:
$Child.ParentNode.InsertAfter($XML.ImportNode($xmld.SelectSingleNode("//KEY[@ObjectName='ProjectOptions']"), $true), $Child)
问题就会消失
作为补充说明,您可能希望使用XPath表达式而不是点符号来选择$Child:
尝试在DocumentElement节点下插入导入的节点,但$Child不是该节点的直接子元素。您需要在$Child的父节点上调用InsertAfter方法 更改此项:
$xml.DocumentElement.InsertAfter($XML.ImportNode($xmld.SelectSingleNode("//KEY[@ObjectName = 'ProjectOptions']"), $true), $Child)
为此:
$Child.ParentNode.InsertAfter($XML.ImportNode($xmld.SelectSingleNode("//KEY[@ObjectName='ProjectOptions']"), $true), $Child)
问题就会消失
作为补充说明,您可能希望使用XPath表达式而不是点符号来选择$Child:
找到了一个简单的方法:
$xmlPO = $xml.SelectNodes("//KEY[@ObjectName='ProjectOptions']")
$xmldPO = $xmld.SelectNodes("//KEY[@ObjectName='ProjectOptions']")
$xmlPO.set_InnerXML($xmldPO.innerXML)
$xml.Save($dpath)
找到了一个简单的方法:
$xmlPO = $xml.SelectNodes("//KEY[@ObjectName='ProjectOptions']")
$xmldPO = $xmld.SelectNodes("//KEY[@ObjectName='ProjectOptions']")
$xmlPO.set_InnerXML($xmldPO.innerXML)
$xml.Save($dpath)