web-dev-qa-db-de.com

Wie rufe ich mit Powershell einen Attributwert aus XML ab?

Ich habe eine Liste von XML-Dateien, aus denen ich die Zeichenfolge nach einer bestimmten Zeile abrufen muss.

In den Dateien muss ich nach einem Tag Event suchen und den Attributwert DLLRoutine erhalten. z.B. Das Tag würde ungefähr so ​​aussehen ...

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

Ich muss nur Dllroutine Werte abrufen. Wie geht das mit PowerShell?

21
Samselvaprabu

Angenommen, Ihre XML-Struktur ähnelt:

$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

Angenommen, Ihr Event -Element hat einen Events -Elementstamm:

$xml.Events.Event.DLLName

Ich habe dies nur in Powershell 3 getestet

16
WhiteKnight

sie können anstelle der Punktnotation auch xpath verwenden:

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

Du könntest benutzen 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

Versuchen $xml.Events.Event.DLLName

Es wird in Version 2 funktionieren, ich habe versucht, xpath in mehreren Skripten zu verwenden, und es schlägt jedes Mal fehl, bis ich die Punktnotation ausprobiert habe, von der ich dachte, ich mache es falsch.

3
Brian