来自不同文件的Powershell XML importnode

时间:2012-03-30 14:25:47

标签: xml powershell

profile.xml的内容:

<files>
  <file folder="CaptureServer" filename="CSConfig" object="CSConfig">
    <Profile name="BBH1200Kofax">
      <OutputCache>\</OutputCache>
      <EncryptedConnectionString>564rgr=</EncryptedConnectionString>
      <ConvertDocsBeforeRelease>false</ConvertDocsBeforeRelease>
    </Profile>
  </file>
  <file folder="CaptureServices3" filename="CSConfig" object="CSConfig">
    <Profile name="BBH1200Kofax">
      <ReleaseToEnterprise>true</ReleaseToEnterprise>
      <CaptureServerUrl />
      <OutputCache />
      <Credentials>
        <EncryptedPassword>46s4rg=</EncryptedPassword>
        <UserName />
        <Domain />
      </Credentials>
      <ConvertDocsBeforeRelease>false</ConvertDocsBeforeRelease>
    </Profile>
  </file>
</files>

rules.xml的内容:

<file folder="" filename="Rules" object="ArrayOfIBarcodeRule">
  <Profile name="Test471">
    <IBarcodeRule>
      <RuleName>DOC-TESTTESTTEST-Code128</RuleName>
      <FieldSequenceNumber>1</FieldSequenceNumber>
      <FieldRectangle>
        <Location>
          <X>0</X>
          <Y>0</Y>
        </Location>
        <Size>
          <Width>0</Width>
          <Height>0</Height>
        </Size>
      </FieldRectangle>
      <SeparationValue>TESTTESTTEST</SeparationValue>
    </IBarcodeRule>
  </Profile>
</file>

我正在尝试将rules.xml(文件节点)的全部内容添加为profile.xml中的另一个节点。如您所见,profile.xml中有许多其他文件节点,rules.xml也是另一个。

这是我尝试的代码,似乎没有做任何事情:

$xml = [xml](Get-Content ".\profile.xml")
$newxml = [xml](Get-Content ".\rules.xml")
$xml.ImportNode($newxml.get_DocumentElement(), $true)
$xml.Save(".\profile.xml")

2 个答案:

答案 0 :(得分:13)

你真的很接近,但ImportNode只制作副本,并没有实际将复制的节点插入到文档中。试试这个:

$newNode = $newxml.ImportNode($xml.get_DocumentElement(), $true)
$newxml.DocumentElement.AppendChild($newNode)
$xml.Save("$pwd\profile.xml")  

答案 1 :(得分:-2)

1.xml的内容

<files><file>123</file><file>456</file><br></files>

2.xml的内容

<file>789</file>

Powershell:

$oXML = [xml](Get-Content "1.xml")
$oNewXml = [xml](Get-Content "2.xml")
$oNewNode = $oXML.ImportNode($oNewXml.get_DocumentElement(), $true)
$oXML.DocumentElement.AppendChild($oNewNode)
$oXML.Save("3.xml")

这对我来说很好