2014-10-17 60 views
0

我想閱讀以下節點並設置一個新值。由於兩個現有的具有不同ID的相同節點,我無法更改子值。Powershell - 在XML中讀取和交換節點值

下面是一個例子: XML來源:

<root> 
     <node1> 
      <child> 
       <baby> 
        <id>1</id> 
        <targetvalue>9999</targetvalue> 
       </baby> 

       <baby> 
       <id>2</id> 
       <targetvalue>9999</targetvalue> 
       </baby> 
      </child> 
     </node1> 
</root> 




if (($myXML.root.node1.child.baby | Where-Object {$_.id -eq '1'-and $_.targetvalue -eq '9999'}) -ne $null) { 
"TEST"} 

我想它已經通過獲取內容,但由於兩個ID,我不能修改至少一個值。可能有人請幫忙? :)

回答

0

我會說:使用正確的工具來完成這項工作。由於您正在使用XML - Select-Xml(和XPath)應該是您的第一選擇:

$node = Select-Xml -Path Path\To\Original.xml -XPath "//baby[id = '1']" 
$node.Node.targetvalue = '444' 
$node.Node.OwnerDocument.Save('c:\temp\Modified.xml') 
+0

謝謝,它像一個魅力:) – jigg3 2014-10-20 07:25:36

0

我覺得這是你追求的...

這將設置你要修改的寶寶節點:

$babyNode = ($myXML.root.node1.child.baby | Where-Object {$_.id -eq '1'-and $_.targetvalue -eq '9999'}) 

該修改值:

$babyNode.targetvalue = "TEST" 

這顯示了兩個嬰兒節點,其中一個具有更新後的值:

$myXML.root.node1.child.baby 
+0

也謝謝! :) – jigg3 2014-10-20 07:26:27