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?
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
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
Vous pouvez utiliser aussi xpath au lieu de la notation par points:
$xml.SelectNodes('//Events/Event') | select DLLName
$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.
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"