我最近开始学习 powershell 来更改 XML 文件。现在我无法在特定位置添加新节点。
我创建了一个 xml 节点
<Name2>Reference</Name2>
并希望将其插入每个 <VFI>
一个内的节点 <customer>
节点。
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 节点中。
我哪里错了?
最佳答案
我想我自己解决了:
我用一些数组试过了,现在可以了。
数组代码:
$Array = @($AlOb2)
InsertAfter 代码:
$Array[$i].InsertAfter($InfoFeld,$AlOb.Node.VIF)
祝大家有个愉快的星期天
问
关于xml - Powershell - 在多个位置添加一个xml节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33593704/