Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PowerShell上将节点从一个XML导入到另一个XML_Xml_Powershell - Fatal编程技术网

在PowerShell上将节点从一个XML导入到另一个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

我需要将名为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 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)​