从多个级别选择XML文件中的特定节点

时间:2011-04-04 15:43:56

标签: xml powershell powershell-v2.0

我有一个类似于以下格式的xml文件:

<benchmark>
<group>
    <id>1</id>
    <rule>
        <id>H1234</id>
        <severity>High</severity>
    </rule>
    <title>How to win</title>
</group>
<group>
    <id>2</id>
    <rule>
        <id>5317</id>
        <severity>low</severity>
    </rule>
    <title>How to not</title>
</group>
<group>
    <id>3</id>
    <rule>
        <id>H15678</id>
        <severity>medium</severity>
    </rule>
    <title>How to be</title>
</group>
<group>
    <id>4</id>
    <rule>
        <id>H454</id>
        <severity>High</severity>
    </rule>
    <title>How to lose</title>
</group></benchmark>

我希望能够从xml docoument中的每个组中选择组/ id,组/规则/ id,组/规则/严重性和组/标题值。

我试过这个,但它只让我成为那里的一部分:

I have tried $xml.benchmark.group | %{$_} | select title, id

感谢您的帮助!

2 个答案:

答案 0 :(得分:11)

这对我有用:

$xml.benchmark.group |
select @{ L = 'GroupID';      E = { $_.id } },
       @{ L = 'GroupTitle';   E = { $_.title } },
       @{ L = 'RuleID';       E = { $_.rule.id } },
       @{ L = 'RuleSeverity'; E = { $_.rule.severity } }

产生以下内容:

GroupID GroupTitle  RuleID RuleSeverity
------- ----------  ------ ------------
1       How to win  H1234  High
2       How to not  5317   low
3       How to be   H15678 medium
4       How to lose H454   High

上面的语法类似于SQL的SELECT Foo AS Bar,在哈希表中选择一个值(ExpressionE)并为显示目的提供别名(Label或{哈希表中的{1}}。

答案 1 :(得分:2)

这可以通过以下方式完成:

Clear-Host
$xmlData = [xml](Get-Content c:\temp\fic.xml)
foreach ($group in $xmlData.benchmark.group)
{
  $group.id
  $group.title
  $group.rule.id
}

在命令行上。

([xml](Get-Content C:\temp\fic.xmlfic.xml)).benchmark.group | % {$_.id + " " + $_.rule.id}

我希望它有所帮助

JP