Comment récupérer une valeur d'attribut de xml en utilisant powershell?

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

dans les fichiers, je dois chercher une balise Event et obtenir la valeur de l'attribut DLLRoutine. par exemple, l'étiquette 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' Dllroutine valeurs. Comment faire avec PowerShell?

19
demandé sur SteveC 2012-08-31 13:22:23

5 réponses

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
27
répondu ravikanth 2012-08-31 10:18:46

en Supposant que votre Event l'élément a un Events élément racine:

$xml.Events.Event.DLLName

Je l'ai seulement testé dans Powershell 3

14
répondu WhiteKnight 2013-09-30 14:39:40

Vous pouvez utiliser aussi xpath au lieu de la notation par points:

$xml.SelectNodes('//Events/Event') | select DLLName
13
répondu walid2mi 2012-09-01 07:24:04

$xml.Events.Event.DLLName

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

1
répondu Brian 2014-04-18 15:51:40

Pourquoi pas 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"
1
répondu pimbrouwers 2017-03-20 14:17:32