2011-04-04 10 views
5

que tengo un archivo XML en un formato similar a este:Selección de nodos específicos en un archivo XML a partir de múltiples niveles

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

Me gustaría ser capaz de seleccionar el grupo/Identificación, grupo/regla/Identificación , los valores de grupo/regla/gravedad y grupo/título de cada grupo en el docum xml.

He intentado esto pero sólo me hace parte del camino:

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

aprecio su ayuda!

Respuesta

11

Esto funciona para mí:

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

produciendo el siguiente:

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 

La sintaxis anterior es similar a SQL de SELECT Foo AS Bar, seleccionando un valor (Expression o E en la tabla hash) y proporcionando un alias para mostrar (Label o L en la tabla hash).

+0

¡Eso funciona! ¡Gracias! – jgrant

2

Esto se puede hacer con:

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

En la línea de comandos.

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

espero que ayude

JP

+0

Gracias por intentarlo. Ya estaba sacando la identificación y el título. También necesitaba la identificación y la gravedad de los nodos de nivel más bajo. – jgrant

+0

Aquí está, no está haciendo un gran esfuerzo. Lo intento; o) – JPBlanc

Cuestiones relacionadas