2017-04-20 3 views
3

Ich habe ein xml Dokument, das ich von einem Fortify-Scan generiert habe. Zur Zeit habe ich einen xml doc, die wie folgt aussieht:XML-Analyse mit Powershell

  <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> 

Was ich will, ist durch dieses Dokument tun, analysieren und herausziehen Hoch, Medium und Low zählt und ordnen sie ein Variable, die an ein anderes Skript übergeben wird.

Mein Problem ist, wenn ich die xml Datei in powershell ziehen, wie kann ich die Zählung für Hohe Ergebnisse erhalten?

Derzeit Skript:

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

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

Antwort

4

Hier ist eine Möglichkeit, wo Sie am Ende 3 Vars haben ($high, $low, $medium):

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

Hier ist eine andere Art und Weise, wo Sie eine bauen Objekt mit 3 Eigenschaften:

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

In der en d $a betrachten:

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

so können Sie schreiben: $a.High

+0

@JPBlac Dank! Das funktioniert großartig! –

3

können Sie versuchen, mithilfe von XPath mit SelectSingleNode:

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

Danke! Ich mag die kurze Version! –

1

andere Methode:

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