2017-04-20 95 views
3

我有一個xml文件,我通過Fortify掃描生成了這個文件。目前,我有一個xml文檔看起來像這樣:使用Powershell進行XML解析

  <Chart chartType="table"> 
       <Axis>Fortify Priority Order</Axis> 
       <MajorAttribute>Analysis</MajorAttribute> 
       <GroupingSection count="2"> 
        <groupTitle>High</groupTitle> 
       </GroupingSection> 
       <GroupingSection count="101"> 
        <groupTitle>Low</groupTitle> 
       </GroupingSection> 
       <GroupingSection count="5"> 
        <groupTitle>Medium</groupTitle> 
       </GroupingSection> 
      </Chart> 

我想要做的就是通過這個文檔解析,並拉出計數,並將它們分配到變量傳遞給另一個腳本。

我的問題是,當我拉xml文件到powershell,我該如何獲得發現計數?

目前腳本:

$xml = [xml](get-content $file) 

$xml.GetElementsByTagName('groupTitle') | Select-Object -Property 'High' 

回答

4

這裏是在結束時,您將有3個瓦爾($high$low$medium)的一種方法:

$xml = [xml](get-content $file) 
$xml.Chart.GroupingSection | % {Set-Variable -Name $_.groupTitle -Value $_.count} 

在這裏你打造另一種方式用3個屬性對象:

$xml = [xml](get-content $file) 
$xml.Chart.GroupingSection | % {$a=New-Object PSCustomObject}{Add-Member -InputObject $a -MemberType NoteProperty -Name $_.groupTitle -Value $_.count} 

在烯ð考慮$a

High Low Medium 
---- --- ------ 
2 101 5 

所以你可以寫:$a.High

+0

@JPBlac謝謝!這很好用! –

3

您可以嘗試使用XPath與SelectSingleNode

$xml.SelectSingleNode("//groupTitle[text() = 'High']").ParentNode.Count 
+0

謝謝!我喜歡短版! –

1

另一種方法:

[xml] $xml=[xml](gc "c:\temp\file1.xml") 
($xml.Chart.GroupingSection | where groupTitle -EQ "High").count