所以我有以下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