【问题标题】:How to extract an XML value from sibling element using Powershell如何使用 Powershell 从兄弟元素中提取 XML 值
【发布时间】:2020-04-28 09:21:46
【问题描述】:

我有一个结构如下的 XML 文件:

<document>
    <Asset>
        <PropertyList Type="DataSource">
            <Property Name="one" Value="some_value1" />
            <Property Name="two" Value="some_value2" />
            <Property Name="three" Value="some_value3" />
        </PropertyList>
        <PropertyList Type="DecisionMaker">
            <Property Name="four" Value="FALSE" />
            <Property Name="five" Value="FALSE" />
            <Property Name="six" Value="FALSE" />
        </PropertyList>
    </Asset>
    <Asset>
        <PropertyList Type="DataSource">
            <Property Name="one" Value="some_value6" />
            <Property Name="two" Value="some_value7" />
            <Property Name="three" Value="some_value8" />
        </PropertyList>
        <PropertyList Type="DecisionMaker">
            <Property Name="four" Value="TRUE" />
            <Property Name="five" Value="FALSE" />
            <Property Name="six" Value="FALSE" />
        </PropertyList>
    </Asset>
</document>

实际上,文档包含几十个元素,并且是由另一个系统创建的。 我想构建一个powershell脚本,它将在文档中搜索值为“TRUE”的属性名称“four”,然后输出存在于同一资产中的兄弟元素下的属性名称“Two”的值父母。

我能够搜索名称为“four”且值为“true”的每个属性节点,但我不知道如何从同级元素中获取值:

[XML]$Test = Get-Content ("C:\folder\test.xml")
$Test.SelectNodes("//Property") | % { $_ | ?{ ($_.Name -eq "four" -and $_.Value -eq "TRUE") }} | Select $_.Value

谁能提供任何指导?

【问题讨论】:

  • select-xml 可能有一些不错的 xpath 方式。

标签: xml powershell scripting


【解决方案1】:

您可以使用ParentNode 属性从 节点上一层,然后搜索 节点子节点。

[XML]$Test = Get-Content ("C:\folder\test.xml")
$PropertyFourNode = $Test.SelectNodes("//Property") | % { $_ | ?{ ($_.Name -eq "four" -and $_.Value -eq "TRUE") }} 

$PropertiesNode = $PropertyFourNode.ParentNode
$PropertiesNode.Property | Where Name -eq 'Two'

【讨论】:

  • 谢谢! .ParentNode 是我需要的。上面的解决方案不太奏效,因为我需要使用 $PropertiesNode.ParentNode.PropertyList.Property 来遍历树,但它帮助我实现了我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
相关资源
最近更新 更多