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?
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
Angenommen, Ihr Event
-Element hat einen Events
-Elementstamm:
$xml.Events.Event.DLLName
Ich habe dies nur in Powershell 3 getestet
sie können anstelle der Punktnotation auch xpath verwenden:
$xml.SelectNodes('//Events/Event') | select DLLName
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"
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.