Как извлечь значение XML из родственного элемента с помощью Powershell - PullRequest
1 голос
/ 10 января 2020

У меня есть файл 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, который будет искать в документе имя свойства «четыре» со значением «ИСТИНА», а затем выводить значение имени свойства «два», которое существует под его родственным элементом в том же активе родитель.

Я могу выполнить поиск в каждом узле свойств с равным именем "four" и значением "true", но я не знаю, как получить значение из элемента-брата:

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

Может ли кто-нибудь предложить какое-либо руководство?

1 Ответ

0 голосов
/ 10 января 2020

Вы можете использовать атрибут ParentNode, чтобы go повысить уровень от узла four , а затем найти дочерний узел two .

[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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...