Как выбрать конкретные узлы XML в Powershell из нескольких значений узлов? - PullRequest
0 голосов
/ 24 апреля 2018

У меня следующий синтаксис XML, и я пытаюсь получить значение в идентификаторе узла "2", ключ строки "Vol2-3" на данный момент:

<nodes>
   <node id="1">
     <store>
        <row key="Vol1-1" value="1a"/>
        <row key="Vol1-2" value="1b"/>
        <row key="Vol1-3" value="1c"/>
        <row key="Vol1-4" value="1d"/>
</store>
</node>
   <node id="2">
     <store>
        <row key="Vol2-1" value="2a"/>
        <row key="Vol2-2" value="2b"/>
        <row key="Vol2-3" value="2c"/>
        <row key="Vol2-4" value="2d"/>
</store>
</node>
   <node id="3">
     <store>
        <row key="Vol3-1" value="3a"/>
        <row key="Vol3-2" value="3b"/>
        <row key="Vol3-3" value="3c"/>
        <row key="Vol3-4" value="3d"/>
</store>
</node>
</nodes>

Код:

$nodevar=2 
[xml]$XMLDoc=(Get-Content "\..\..somefile.txt")
$value_extract=$XMLDoc.nodes.SelectNodes("node[@id='$nodevar']").store.SelectNodes("row[@key='']")

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь настроить переменную $ value_extract на поворот от правильного идентификатора узла, чтобы получить соответствующий ключ строки, содержащий мое значение.Я написал это таким образом, что в конечном итоге я буду использовать SelectNodes в цикле for для получения значений, необходимых для дальнейшей обработки.Есть ли хороший способ написать это, так как я отклоняюсь от правильного идентификатора узла, а также от правильного ключа строки?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Или без использования синтаксиса xpath:

$node = $XMLDoc.nodes.node | ? id -eq '2'
$row = $node.store.row | ? key -eq 'Vol2-3'
$row.value
0 голосов
/ 24 апреля 2018

Я не уверен, что понимаю вашу проблему сводки, но это должно сработать, если вам просто нужно получить текстовое значение:

[xml]$xml = Get-Content "somexml.xml"
$nodevar = "2"
$keyvar = "Vol2-3"
$value_extract=$xml.SelectNodes("/nodes/node[@id='$nodevar']/store/row[@key='$keyvar3']/@value")
...