web-dev-qa-db-fra.com

Comment récupérer une valeur d'attribut à partir de XML en utilisant PowerShell?

J'ai une liste de fichiers XML, à partir de laquelle je dois récupérer la chaîne après une ligne particulière.

Dans les fichiers, je dois rechercher une balise Event et obtenir la valeur d'attribut DLLRoutine. par exemple. la balise ressemblerait à quelque chose comme ci-dessous ...

<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain" 
       DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" 
       InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>

J'ai juste besoin d'obtenir les valeurs de Dllroutine. Comment faire avec PowerShell?

21
Samselvaprabu

En supposant que votre structure XML est quelque chose de similaire à:

$xml = [xml]'
<Events>
<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain" DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
<Event Definition="Validate1" DLLPath="" DLLName="Helper.dll1" DLLClass="HelpMain1" DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
</Events>
'

#Or get it from a XML file
$xml = [xml](Get-Content $XMLPath)

$xml.Events.Event | Select DLLName
33
ravikanth

En supposant que votre élément Event a une racine d'élément Events:

$xml.Events.Event.DLLName

Je ne l'ai testé que dans Powershell 3

16
WhiteKnight

vous pouvez également utiliser xpath au lieu de la notation par points:

$xml.SelectNodes('//Events/Event') | select DLLName
14
walid2mi

Vous pouvez utiliser Select-XML:

$xml = [xml]'
<Events>
<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain" DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
<Event Definition="Validate1" DLLPath="" DLLName="Helper.dll1" DLLClass="HelpMain1" DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
</Events>
'

Select-XML -xml $xml -xpath "//Event/@DLLName"
3
pim

Essayez $xml.Events.Event.DLLName

Cela fonctionnera dans la version 2, j'ai essayé d'utiliser xpath dans plusieurs scripts et il échoue à chaque fois, donc jusqu'à ce que j'essaie la notation par points, je pensais que je le faisais mal.

3
Brian