2017-04-20 18 views
3

私は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ドキュメントを持っています変数を別のスクリプトに渡します。

私の問題は、私はpowershellxmlファイルを引っ張ったときに、どのように私はハイ調査結果のカウントを得るのですかですか?

現在のスクリプト:

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

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

答えて

4

はここで終わりにあなたが3 VARS($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} 

at the en

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

ので、あなたが書くことができます:$a.High

+0

@JPBlacのおかげ$a考えるdは!これは素晴らしい作品です! –

3

をあなたがSelectSingleNodeでXPathを使用して試すことができます:

$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