如何在powershell中使用带有where子句的selectnode?

时间:2014-09-25 13:33:04

标签: powershell

我有这个xml:

<root>
<Player uID="2363">
<Name>Roy Mark</Name>
<Position>Goalee</Position>
<Stat Type="first_name">Roy</Stat>
<Stat Type="last_name">Mark</Stat>
<Stat Type="jersey_num">2</Stat>
</Player>
<Player uID="2343">
<Name>Steve Jack</Name>
<Position>Goalee</Position>
<Stat Type="first_name">Steve</Stat>
<Stat Type="last_name">Jack</Stat>
<Stat Type="jersey_num">7</Stat>
</Player>
<root>

我想用uID 2343获得玩家的jersey_num。

我正在尝试的是:

$fileContents = [xml](gc Test.xml)
$temp1 = $fileContents.SelectNodes("/root/Player/Stat[@Type='jersey_num']").innerXML | where {$fileContents.root.Player.uID -eq "2343"}

我得到了两个球衣号码。请帮忙。

3 个答案:

答案 0 :(得分:2)

$fileContents.SelectNodes('/root/Player[@uID="2343"]/Stat[@Type="jersey_num"]/text()')

答案 1 :(得分:1)

使用您的代码,我认为您需要更新此部分:

where {$fileContents.root.Player.uID -eq "2343"}

为:

where {$_.root.Player.uID -eq "2343"}

$ _是占位符,用于从您的命令输入数据。

答案 2 :(得分:1)

试试这个:

$player = 2343
$fileContents.SelectNodes("//*[contains(concat(' ', @uID), $player)]//Stat") | where {$_.Type -eq "jersey_num"}