Reputation: 18137
I have a list of XML files, from which I have to get the string after a particular line.
In the files, I need to look for a tag Event
and get the attribute value DLLRoutine
.
e.g. the tag would look something like below ...
<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain"
DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures"
InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
I just need to get Dllroutine
values. How to do it using PowerShell?
Upvotes: 43
Views: 121999
Reputation: 12567
You could use 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").Node
Upvotes: 6
Reputation: 31
Try $xml.Events.Event.DLLName
It will work in version 2, I have tried to use xpath in several scripts and it fails every time so until I tried the dot notation I thought I was doing it wrong.
Upvotes: 3
Reputation: 5056
Assuming your Event
element has an Events
element root:
$xml.Events.Event.DLLName
I've only tested this in Powershell 3
Upvotes: 22
Reputation: 2888
you can use also xpath instead of dot notation:
$xml.SelectNodes('//Events/Event') | select DLLName
Upvotes: 19
Reputation: 25800
Assuming your XML structure is something similar to:
$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
Upvotes: 50