2015-11-08 40 views
3

我最近開始學習PowerShell來更改XML文件。現在我無法在特定位置添加新節點。 我創建了一個xml節點 <Name2>Reference</Name2> 並且希望將其插入到一個<customer>節點內的每個<VFI>節點中。Powershell - 在多個位置添加一個xml節點

XML文件:

<WartbareEinheitenListe> 
<WartbareEinheit> 
    <Name>John Wayne</Name> 
    <Typ>STRUKTUR</Typ> 
    <Customer>100008</Customer> 
    <WartbareEinheiten> 
    <WartbareEinheit> 
    <Name>Wohnhaus</Name> 
    <Typ>OBJECT</Typ> 
    <Customer>100008</Customer> 
    <VIF>          <---- Insert here 
    <InfoFeld> 
     <Name>Nummer</Name> 
     <InfoFeldTyp>DECIMAL</InfoFeldTyp> 
     <Inhalt> 
     <Nummer>4500514</Nummer> 
     </Inhalt> 
    </InfoFeld> 
    </VIF> 
    </WartbareEinheit> 
    <WartbareEinheit> 
    <Name>John Wayne</Name> 
    <Typ>OBJECT</Typ> 
    <Customer>100008</Customer> 
    <VIF>         <---- Insert here 
    <InfoFeld> 
     <Name>Nummer</Name> 
     <InfoFeldTyp>DECIMAL</InfoFeldTyp> 
     <Inhalt> 
     <Nummer>5002449</Nummer> 
     </Inhalt> 
    </InfoFeld> 
    </VIF> 
    </WartbareEinheit> 
    </WartbareEinheiten> 
</WartbareEinheit> 
</WartbareEinheitenListe> 

我的代碼:

$Path = "$env:....\Desktop\xmlpath.xml" 

$xml = New-Object -TypeName XML 
$xml.Load($Path) 

$AlOb = $xml.WartbareEinheitenListe.WartbareEinheit.WartbareEinheiten.WartbareEinheit | Where-Object {$_.Customer -eq "100008"} 

$AlOb2 = $AlOb.SelectSingleNode("VIF") 
$R = $AlOb | Where-Object {$_.Typ -eq "OBJECT"} 
$E = $R.Typ 

for ($i=0 ; $i -lt $E.count; $i++) { 

$InfoFeld = $xml.CreateElement("InfoFeld") 

$Mandant = $xml.CreateElement("Name2") 
$MandantInhalt = $xml.CreateTextNode("Reference") 
$Mandant.AppendChild($MandantInhalt) 

$InfoFeld.AppendChild($Mandant) 

$AlOb2.InsertAfter($InfoFeld,$AlOb.Node.VIF) 
} 
$NewPath = "$env:....Desktop\xmlpath2.xml" 
$xml.Save($NewPath) 

的結果是,我爲每一個VIF,這是正確的兩種新元素,但我的代碼將在最後兩個元素VIF節點。

Wheres my mistake?

回答

0

我想我自己解決了它:

我試着用一些數組,現在它的工作原理。

代碼陣: $Array = @($AlOb2)

代碼InsertAfter:

$Array[$i].InsertAfter($InfoFeld,$AlOb.Node.VIF) 

願望ü所有一個不錯的週日

Q

0

可以使用SelectNodes()方法來選擇所有<VIF>節點:

$VIFNodes = $xml.SelectNodes('/WartbareEinheitenListe/WartbareEinheit/WartbareEinheiten/WartbareEinheit/VIF') 

,然後你的新<Name2>元素與AppendChild添加到他們:

foreach($VIFNode in $VIFNodes){ 
    $Name2Node = $xml.CreateElement("Name2") 
    $Name2Node.InnerText = "Reference" 
    $VIFNode.AppendChild($Name2Node) | Out-Null 
} 
$NewPath = "$env:....Desktop\xmlpath2.xml" 
$xml.Save($NewPath)