2014-04-02 77 views
1

我有以下xml格式,並且具有文本文件格式的id。我需要使用PowerShell來實現這一點。我不能夠在子項中正確搜索使用Powershell進行XML子項搜索

號的文本文件

121 
120 
133 

XML文件格式:

<All> 
    <section1 name= "mysec1"> 
    <id category="Roll" no="121" sub="Eng" /> 
    <id category="nam" no="123" sub="Geo" /> 
    <id category="Roll" no="120" sub="Bot" /> 
</section1> 
    <section1 name= "mysec2"> 
    <id category="Roll" no="141" sub="Sci" /> 
    <id category="nam" no="133" sub="Geo" /> 
    <id category="Roll" no="150" sub="Bot" /> 
</section1> 
</All> 

需要根據編號在XML文件中搜索。 所以輸出將

121: Roll_mysec1_Eng 
120: Roll_mysec1_Bot 
133: nam_mysec2_Geo 
+0

這不是有效的XML,是嗎? ''? –

+0

更新了xml格式..這是一個示例xml,因此錯過了標籤 – usr021986

回答

0

基於日你可以簡單地過濾節點e文本文件內容來查找您想要的節點。

$foundIds = $xml.all.section1.id | Where { $textFile -contains $_.no } 

然後,讓你期待,再次輸出格式,只需格式化,只要你想它:

$foundIds | Foreach { "$($_.no): $($_.category)_$($_.parentnode.name)_$($_.sub)" } 

這裏是一個完整的樣本,使用您的樣本數據,並更換線取而代之的是從文件中獲取數據(您可能需要將-Encoding參數添加到Get-Content調用中)。

$textFile = @" 
121 
120 
133 
"@ -split [Environment]::NewLine 

[xml]$xml = @" 
<All> 
    <section1 name="mysec1"> 
    <id category="Roll" no="121" sub="Eng" /> 
    <id category="nam" no="123" sub="Geo" /> 
    <id category="Roll" no="120" sub="Bot" /> 
</section1> 
    <section1 name="mysec2"> 
    <id category="Roll" no="141" sub="Sci" /> 
    <id category="nam" no="133" sub="Geo" /> 
    <id category="Roll" no="150" sub="Bot" /> 
</section1> 
</All> 
"@ 

#When you have this data in files, you should replace the scripb above 
#with the following two lines instead 
#$textFile = Get-Content C:\textfile.txt 
#[xml]$xml = Get-Content C:\data.xml 

$foundIds = $xml.all.section1.id | Where { $textFile -contains $_.no } 

$foundIds | Foreach { "$($_.no): $($_.category)_$($_.parentnode.name)_$($_.sub)" } 
0

試試這個:

cat ids.txt | % { 
    Select-Xml -Path xml.xml -XPath "//id[@no=$_]" 
    } | % { 
    $_.node 
    } | % { 
     "{0}: {1}_{2}_{3}" -f $_.no,$_.category,$($_.parentnode | select -expand name),$_.sub 
     }