1
我正在使用powershell做一些清理復古pi遊戲列表,但我堅持使用XML的語法。 目標是刪除特定文件擴展名類型的所有遊戲條目。Powershell:在XML節點中搜索文件擴展名並刪除父節點
清單的格式爲這樣:
<?xml version="1.0"?>
<gameList>
<game id="" source="">
<path>./2020 Super Baseball (USA).SMC</path>
<name>2020 Super Baseball</name>
<desc />
<image>./boxart/2020 Super Baseball (USA).png</image>
<marquee>./wheel/2020 Super Baseball (USA).png</marquee>
<video>./snap/2020 Super Baseball (USA).mp4</video>
<releasedate />
<developer />
<publisher />
<genre />
</game>
<game id="" source="">
<path>./2020 Super Baseball (USA).smc</path>
<name>2020 Super Baseball</name>
<desc />
<image>./boxart/2020 Super Baseball (USA).png</image>
<marquee>./wheel/2020 Super Baseball (USA).png</marquee>
<video>./snap/2020 Super Baseball (USA).mp4</video>
<releasedate />
<developer />
<publisher />
<genre />
</game>
</gameList>
每場比賽既有.smc和.SMC項,我要刪除的.SMC
到目前爲止,我已經能夠循環訪問文件並刪除路徑中包含.SMC擴展名的每個遊戲節點的內容。
# Load the existing document
[xml]$xml = Get-Content "snes-gamelist.xml"
#Iterate through each game node
ForEach($Path in $xml.gamelist.game.path | Where-Object {$_ -like "*.SMC"})
{
$xml.SelectsingleNode("//path[.='"+$Path+"']") | % {
$_.ParentNode.RemoveAll() }
}
#Output
$xml.save("MOD-snes-gamelist.xml")
問題是,實際的遊戲節點仍然落後,我不知道如何完全刪除它。
<?xml version="1.0"?>
<gameList>
<game>
</game>
<game id="" source="">
<path>./2020 Super Baseball (USA).smc</path>
<name>2020 Super Baseball</name>
<desc />
<image>./boxart/2020 Super Baseball (USA).png</image>
<marquee>./wheel/2020 Super Baseball (USA).png</marquee>
<video>./snap/2020 Super Baseball (USA).mp4</video>
<releasedate />
<developer />
<publisher />
<genre />
</game>
</gameList>
在此先感謝。
非常感謝J. Bergger。我實際上是在發佈自己的解決方案,但是你的解決方案比我的解決方案要好得多。 –