这是我到目前为止的内容,但是出现了"The node to be inserted is from a different document context."错误。有任何想法吗?

$xml = [xml](Get-Content "C:\IT\HowardCo\Compare\New.xml")
$xmld = [xml](Get-Content "C:\IT\HowardCo\Compare\ConfigExport.xml")
$newNode = $xml.ImportNode($xmld.SelectSingleNode("//SaleItem[SaleItemId=2]"), $true)
$xmld.DocumentElement.AppendChild($newnode)
$xml.Save("C:\IT\HowardCo\Compare\New.xml")

这是我试图从中获取信息的XML。它是由SaleItemID组织的项目列表,我试图在Price1下抓取该项目和RevenueCenter。任何对此的帮助将是惊人的。
<ConfigExport>
    <SaleItems>
        <SaleItem>
            <SaleItemId>2</SaleItemId>
            <AltItemId>0</AltItemId>
            <Description>*Torta Ahogada Combo</Description>
            <Description2/>
            <Division>2</Division>
            <Available>1</Available>
            <BarCode/>
            <Plu Id="0"/>
            <Function Id="0">Revenue</Function>
            <RevenueCenter Id="1" Name="La Cocina">
                <Price1>6.49</Price1>
                <Price2>6.49</Price2>
                <ItemAvailabilityByMode>
                    <Mode Id="1" Name="Here">
                        <Available>1</Available>
                    </Mode>
                    <Mode Id="2" Name="To Go">
                        <Available>1</Available>
                    </Mode>
                </ItemAvailabilityByMode>
            </RevenueCenter>
        </SaleItem>
    </SaleItems>
</ConfigExport>

最佳答案

假设您的new.xml开始是这样的:

<ConfigExport>
    <SaleItems>
    </SaleItems>
</ConfigExport>

您似乎将节点重新附加到从头开始阅读的同一文档中,最后一行却是第二行-我认为这不是您想要的。定义不明确的变量名使代码难以阅读和调试。

这是一个简单的重写,命名更清晰:
$importXml = [xml]( Get-Content "C:\IT\HowardCo\Compare\New.xml" )
$exportXml = [xml]( Get-Content "C:\IT\HowardCo\Compare\ConfigExport.xml" )
$node = $exportXml.SelectSingleNode( "//SaleItem[SaleItemId=2]" )
$newNode = $importXml.ImportNode($node, $true)
$importXml.DocumentElement.AppendChild($newnode)
$importXml.Save( "C:\IT\HowardCo\Compare\New.xml" )

在原始代码中,使用这样的命名,您可能会更快地看到将$newNode附加到$exportXml中。

10-08 17:51