我有以下XML语法,我试图获取节点ID中的值" 2",Row Key" 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变量设置为从正确的节点ID转移到包含我的值的相应行键。我用这样的方式编写它,我最终会在for循环中使用SelectNodes来获取进一步处理所需的值。有没有一种好的方法来写这个,因为我正在转移正确的节点ID以及正确的行键?
答案 0 :(得分:1)
我不确定我是否理解您的枢轴问题,但如果您只需要获取文本值,这应该可行:
[xml]$xml = Get-Content "somexml.xml"
$nodevar = "2"
$keyvar = "Vol2-3"
$value_extract=$xml.SelectNodes("/nodes/node[@id='$nodevar']/store/row[@key='$keyvar3']/@value")
答案 1 :(得分:0)
或者不使用xpath语法:
$node = $XMLDoc.nodes.node | ? id -eq '2'
$row = $node.store.row | ? key -eq 'Vol2-3'
$row.value