2014-09-25 25 views
0

我有這樣的XML:如何在powershell中使用selectnode和where子句?

<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> 

我想要得到的球員的jersey_num與UID 2343

我試圖爲:

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

而且我得到兩個球衣號碼。請幫忙。

回答

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

與您的代碼,我在想,你需要更新此部分:

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

到:

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

的$ _是一個用於數據的佔位符是從你的命令中輸入。

1

試試這個:

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