如何使用 PowerShell 获取给定子节点的父节点?

如何使用 PowerShell 获取给定子节点的父节点?

我是 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

相关内容