使用Powershell进行XML解析

问题描述:

我有一个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' 

这里是在结束时,您将有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谢谢!这很好用! –

您可以尝试使用XPath与SelectSingleNode

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

谢谢!我喜欢短版! –

另一种方法:

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