繁体   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