2017-01-27 2 views
1

Это то, что у меня есть до сих пор, но я получаю ошибку "The node to be inserted is from a different document context.". Есть идеи?Импортировать узел в другой XML-документ

$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 Im пытается захватить товар и 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> 
+0

Я представил изменение для вашего сломанного XML-примера. У вас был висит открытый второй SaleItem и не закрывал SalesItems или ConfigExport. –

+0

Кроме того, было бы полезно, если бы вы отправили образец своего исходного контента для new.xml –

+0

@MatthewWetmore Эй, причина, по которой Saleitem оставлена ​​открытой, - это потому, что после нее появилось много больше продаж. XML довольно большой. Кроме того, New.xml будет просто пустым документом, пока он не скопирует определенный идентификатор SaleitemID. Спасибо! –

ответ

0

Если предположить, что 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.

+0

Это сработало отлично! Благодаря! –

Смежные вопросы