In this example, we are going to explain how to select data from XML
over an XPATH in PowerShell with some basic examples. We have discussed how to read XML data in
Powershell, print data on the screen and update XML data earlier. XPATH gives
an administrator more power to apply conditional logic on XML and select
specific data that you are searching for. We will use Select-XML cmdlet to
query XML and will provide some interesting examples as we move on this
tutorial.
The test XML that we will use for the XPATH query in Powershell is
provided below:
Search XML – PowerShell Xpath Example
<Details>
<department>
<ID>10</ID>
<dname>Administration</dname>
<manager>200</manager>
<location>1700</location>
<revenue>77</revenue>
</department>
<department>
<ID>20</ID>
<dname>Marketing</dname>
<manager>201</manager>
<location>1800</location>
<revenue>50</revenue>
</department>
<department>
<ID>30</ID>
<dname>Purchasing</dname>
<manager>114</manager>
<location>1700</location>
<revenue>68</revenue>
</department>
<department>
<ID>40</ID>
<dname>Human Resources</dname>
<manager>203</manager>
<location>2400</location>
<revenue>30</revenue>
</department>
<department>
<ID>50</ID>
<dname>Shipping</dname>
<manager>121</manager>
<location>1500</location>
<revenue>37</revenue>
</department>
</Details>
Load XML Data into a PowerShell Variable
The second step is to load the XML into a powershell variable. This is done using the command as shown below:
PS C:\> $xpath_example=[xml] (Get-Content c:\test.xml)
PS C:\> $xpath_example
Details
-------
Details
Using Select-XML cmdlet in PowerShell
We are now ready to use Select-XML cmdlet and query the XML we just loaded in Powershell. To select the first “department” node in Powershell and XPATH, you run a command like the one shown below:
PS C:\> (Select-Xml -Content $xmltest -XPath /Details/department)[0].Node
ID : 10
dname : Administration
manager : 200
location : 1700
revenue : 77
This command extracts the values of the first node, with the XPath you have provided and dumps the result back to the screen.
Using Select-XML to select all the Nodes of XML in PowerShell
If you want to select all the nodes under Details, and print them in the output, you cannot repeat the command we saw above with repeating node numbers. One way to do this would be to pipe the output of Select-XML to a “foreach” cmdlet. This is illustrated below:
PS C:\> Select-Xml -Content $xmltest -XPath /Details/department|
>> foreach {$_.node }
>>
ID : 10
dname : Administration
manager : 200
location : 1700
revenue : 77
ID : 20
dname : Marketing
manager : 201
location : 1800
revenue : 50
ID : 30
dname : Purchasing
manager : 114
location : 1700
revenue : 68
ID : 40
dname : Human Resources
manager : 203
location : 2400
revenue : 30
ID : 50
dname : Shipping
manager : 121
location : 1500
revenue : 37
This should give you a very good introduction in using Powershell to query XML with XPATH expressions. We will see some more complex XPATH examples to select XML data in the next post.
No comments:
Post a Comment