我是 PowerShell 新手。我必须编写一个脚本,该脚本可以通过传递子节点返回第一个父节点(节点)值。
我有以下 XML。当我将值“AAA”传递给我的 PowerShell 脚本时,它应该返回“parent2”,而当我传递“III”时,它应该返回“parent311”。
有人可以帮我写这个脚本吗?
XML:
<root>
<parent>
<parent2>
<child>AAA</child>
</parent2>
<parent3>
<child>BBB</child>
<child>CCC</child>
<child>DDD</child>
</parent3>
<parent4>
<child>EEE</child>
</parent4>
<parent5>
<child>FFF</child>
</parent5>
</parent>
<parent21>
<parent211>
<child>GGG</child>
</parent211>
<parent311>
<child>HHH</child>
<child>III</child>
<child>JJJ</child>
</parent311>
<parent411>
<child>KKK</child>
</parent411>
<parent511>
<child>LLL</child>
</parent511>
</parent21>
</root>
答案1
如果你有对子节点的引用,则可以使用适当命名的ParentNode
属性。例如,对于您发布的 XML 文件:
$xml = [xml](Get-Content file.xml)
$child = $xml.SelectSingleNode("root/parent/parent2/child")
$child.ParentNode.Name
当然,您可能使用其他方法来获取子节点SelectSingleNode()
,但它有助于说明示例。上面的输出将是:
parent2
答案2
使用 XPath 过滤:
## Change child node here:
$childnode = "AAA"
[xml]$xml = Get-Content file.xml
## XPath:
$childxpath = "/root/*/*[./child='$childnode']"
## Get node:
$node = $xml.SelectSingleNode($childxpath, $null)
## Show selected node name:
Write-Host $node.name
在 XPath 中/root/*/*[./child='$childnode']
:
- 第一个
*
匹配:<parent>
&<parent21>
- 第二个
*
匹配:<parent2>
,<parent3>
...&<parent211>
,<parent311>
... [./child='$childnode']
匹配:名为 的子节点child
,且值等于$childnode