所以我有以下xml(items.xml),我想找到子节点项的属性通过属性迭代,如果我在父节点级别找到相似的属性将其替换为子节点属性,并删除名称以外的子属性。修改通过使用PowerShell迭代Child属性的XML父属性
<items>
<model type="model1" name="default" price="12.12" date="some_value">
<PriceData>
<item name="watch" price="24.28" date="2013-12-01" />
</PriceData>
</model>
<model type="model2" name="default" price="12.12" date="some_value">
<PriceData>
<item name="toy" price="22.34" date="2013-12-02"/>
</PriceData>
</model>
<model type="model3" name="default" price="12.12" date="some_value">
<PriceData>
<item name="bread" price="24.12" date="2013-12-03"/>
</PriceData>
</model>
</items>
最终的XML应该是这样的
<items>
<model type="model1" name="watch" price="24.28" date="2013-12-0">
<PriceData>
<item name="watch" />
</PriceData>
</model>
<model type="model2" name="toy" price="22.34" date="2013-12-02">
<PriceData>
<item name="toy" "/>
</PriceData>
</model>
<model type="model3" name="bread" price="24.12" date="2013-12-03">
<PriceData>
<item name="bread" />
</PriceData>
</model>
</items>
我能够获得在子级别的属性,但我无法穿越回从子级别的父节点。
以下是我试图让父节点
[xml]$model = get-content items.xml
$model.SelectNodes("//item/@*")
Output:
#text
-----
watch
24.28
2013-12-01
toy
22.34
2013-12-02
bread
24.12
2013-12-03
$model.SelectNodes("//item/@*") | foreach {write-host $_.parentnode}
No Output:
$model.SelectNodes("//item/@*") | foreach {write-host $_.parentnode.parentnode}
No Output:
我可以得到子节点的属性名称如下代码:
$model.SelectNodes("//item/@*") | foreach {write-host $_.name}
Output:
PS C:\BIOS_Work_Dir\Kit_Manifest_test> $model.SelectNodes("//item/@*") | foreach {write-host $_.name}
name
price
date
name
price
date
name
price
date
现在对于每个属性,我只需要回到父节点,检查是否存在类似的属性,并将其替换为子节点属性
所以,我正在寻找类似
$model.SelectNodes("//item/@*") | foreach {($_.name).parentnode.parentnode.($_.name)} | <some code to replace parentnode attribute with child attribute>
然后删除的子属性类似
$model.SelectNodes("//item/@*") | where {$_.name -notlike "name"} | foreach {$_.Removeattribute()}
,如果这些都可以在一个单一的命令来完成,这将是真棒
也许我也试图做一个很多东西在一条线上
任何指针非常感谢! 不知道我在做什么错误,因为PowerShell不会为父节点使用情况抛出错误,而只是不会打印任何内容。任何有经验的程序员都可以帮助你!
尼斯!谢谢一吨har07! OwnerElement是我寻找的魔法功能,它的功能就像一个魅力! 您是否知道任何其他函数只会在父级节点级别打印属性“名称和值”。 此外,什么是找出在PowerShell中默认的功能最好的办法,遗憾的是似乎没有为PowerShell的是巨大的文档左右。 – Jose