2013-04-03 66 views
0

我有以下xml文件。在此我想過濾所有有23歲僱員的城市名稱。使用Powershell從xml中過濾數據

請幫助我使用PowerShell腳本。

我期待一個答案,晨奈,班加羅爾

<?xml version="1.0" ?> 
    <customers> 
<city name="Chennai"> 
    <Name>Anand</Name> 
    <Id>123</Id> 
    <Age>23</Age> 
</city> 
<city name="Banglore"> 
    <Name>Arun</Name> 
    <Id>321</Id> 
    <Age>23</Age> 
</city> 
<city name="Mumbai"> 
    <Name>Ashok</Name> 
    <Id>1</Id> 
    <Age>22</Age> 
</city> 

我有下面的代碼來獲得城市名的列表,

[xml]$test=Get-Content D:\test.xml 
$names=$test.SelectNodes("/customers/city") 
$sno=0 
foreach($node in $names) 
{ 
    $sno++ 
    $id=$node.getAttribute("name") 
    Write-Host $sno $id 
} 

但有人好心幫我過濾數據。

+3

1)你的XML格式不正確,因爲客戶元素未關閉。 2)努力解決問題並尋求特定問題的幫助。 – vonPryz

+0

Chennai和Banglore在兩個不同的城市節點。除非你自己結合這兩個數值,否則你不會接受Chenai,Banglore'作爲一個值。 –

回答

1

瞭解XPath以及如何查詢XML文檔。關鍵是使用謂詞來過濾數據:/customers/city[Age=23]。像這樣,

$names = $test.SelectNodes("/customers/city[Age=23]") 
$sno = 0 
foreach($node in $names) { 
    $sno++ 
    $id = $node.getAttribute("name") 
    Write-Host $sno $id 
} 

輸出:

1 Chennai 
2 Banglore 
+0

請注意,XPath表達式區分大小寫。此外,您可以直接選擇城市名稱,而不需要額外的'getAttribute()':'// city [Age = 23]/@ name'。 –