40

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?

SteveC
  • 15,808
  • 23
  • 102
  • 173
Samselvaprabu
  • 16,830
  • 32
  • 144
  • 230

5 Answers5

49

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
ravikanth
  • 24,922
  • 4
  • 60
  • 60
21

Assuming your Event element has an Events element root:

$xml.Events.Event.DLLName

I've only tested this in Powershell 3

WhiteKnight
  • 4,938
  • 5
  • 37
  • 41
19

you can use also xpath instead of dot notation:

$xml.SelectNodes('//Events/Event') | select DLLName
walid2mi
  • 2,704
  • 15
  • 15
  • 2
    This approach worked really good when trying to parse nodes with special characters on the name. – vhugo Oct 18 '19 at 16:13
8

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"
Josh Noe
  • 2,664
  • 2
  • 35
  • 37
pim
  • 12,019
  • 6
  • 66
  • 69
3

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.

Palpatim
  • 9,074
  • 35
  • 43
Brian
  • 31
  • 1