簡體   English   中英

PowerShell:定位父節點並編輯子節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM