Xml PowerShell:找到父节点并编辑子节点
我有一个包含0到n个节点的给定XML文件,名为。我想找到包含值“VRS_TacPack”的子节点“Name”的“”节点。如果发现,我需要编辑子节点“Disabled”和“ManualLoad”,然后将更改后的XML文件写回 给定XML文件的结构:Xml PowerShell:找到父节点并编辑子节点,xml,powershell,Xml,Powershell,我有一个包含0到n个节点的给定XML文件,名为。我想找到包含值“VRS_TacPack”的子节点“Name”的“”节点。如果发现,我需要编辑子节点“Disabled”和“ManualLoad”,然后将更改后的XML文件写回 给定XML文件的结构: <?xml version="1.0" encoding="Windows-1252"?> <SimBase.Document Type="Launch" version=&
<?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>
...
喋喋不休
...
VRS_TacPack
真的
假的
模块\VRS\u TacPack\VRS\u TacPack.dll
布鲁
...
...
读写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)
#设置新的XML对象并读取DLL.XML文件内容
$xmlDll=New Object System.XML.XMLDocument
$xmlDll.Load($tacPackFileSpec)
#获取子节点包含“VRS\u TacPack”的节点
???
#输出修改后的DLL.XML文件
$xmlDll.Save($tacPackFileSpec)
非常感谢您的帮助或提示
汉内斯给你两个选择:
[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.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")