2014-04-02 38 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 
     }