[英]PowerShell: Locate parent node and edit children
我有一個給定的 XML 文件,其中包含 0 到 n 個節點,稱為 <Launch.Addon>。 我想使用包含值“VRS_TacPack”的子節點“Name”來定位“<Launch.Addon>”節點。 如果發現我需要編輯子節點“禁用”和“手動加載”,然后將更改后的 XML 文件寫回。
給定 XML 文件的結構:
<?xml version="1.0" encoding="Windows-1252"?>
<SimBase.Document Type="Launch" version="1,0">
...
<Launch.Addon>
<Name>BlaBlaBla</Name>
...
</Launch.Addon>
<Launch.Addon>
<Name>VRS_TacPack</Name>
<Disabled>True</Disabled>
<ManualLoad>False</ManualLoad>
<Path>Modules\VRS_TacPack\VRS_TacPack.dll</Path>
</Launch.Addon>
<Launch.Addon>
<Name>BluBluBlu</Name>
...
</Launch.Addon>
...
</SimBase.Document>
讀取和寫入 XML 文件沒有問題,但由於我不知道如何在 XML 結構中導航,所以我使用示例來解決這個問題的所有嘗試都失敗了。
我目前的腳本狀態
# Set up new XML object and read DLL.XML file content
$xmlDll = New-Object System.XML.XMLDocument
$xmlDll.Load($tacPackFileSpec)
# Get the <Launch.Addon> node with child node <Name> contains 'VRS_TacPack'
???
# Output modified DLL.XML file
$xmlDll.Save($tacPackFileSpec)
非常感謝任何幫助或提示 Hannes
這里有兩個選項供您選擇:
[xml]$xml = @"
<?xml version="1.0" encoding="Windows-1252"?>
<SimBase.Document Type="Launch" version="1,0">
<Launch.Addon>
<Name>BlaBlaBla</Name>
</Launch.Addon>
<Launch.Addon>
<Name>VRS_TacPack</Name>
<Disabled>True</Disabled>
<ManualLoad>False</ManualLoad>
<Path>Modules\VRS_TacPack\VRS_TacPack.dll</Path>
</Launch.Addon>
<Launch.Addon>
<Name>BluBluBlu</Name>
</Launch.Addon>
</SimBase.Document>
"@
使用 XPATH(區分大小寫)
$xml.SelectNodes("//Launch.Addon/Name[contains(text(), 'VRS_TacPack')]") | ForEach-Object {
$_.ParentNode.Disabled = 'False'
$_.ParentNode.ManualLoad = 'True'
}
$xml.Save("D:\Test\blah.xml")
使用“虛線”屬性(不區分大小寫)
# need to quote the element names because of the '.'
$xml.'SimBase.Document'.'Launch.Addon' | Where-Object { $_.Name -eq 'VRS_TacPack' } | ForEach-Object {
$_.Disabled = 'False'
$_.ManualLoad = 'True'
}
$xml.Save("D:\Test\blah.xml")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.