使用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
答
您可以尝试使用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
@JPBlac谢谢!这很好用! –