Here we’ll show how XPath works. Let’s take the following XML as a lab rat.
<?xml version="1.0" encoding="UTF-8"?>
<list>
<item new='true'>
<title lang="en">Pop-Music DVD</title>
<author >K. A. Bred</author>
<year>2012</year>
<prices>
<price currency="USD">29.99</price>
<price currency="EUR">23.2</price>
</prices>
</item>
<item new='false'>
<title>Gone with the wind</title>
<author>M. Mitchell</author>
<year>1936</year>
<prices>
<price currency="USD">19.05</price>
<price currency="EUR">15</price>
</prices>
</item>
</list>
Select the year of the second item
//item[2]/year
<year>1936</year>
Select all USD prices (price nodes)
//price[@currency=’USD’]
<price currency="USD">29.99</price>
<price currency="USD">19.05</price>
Get all names of items with price>20
//price[text()>20]/preceding::title/text()
Pop-Music DVD
Get text of all EUR price nodes having any text
//price[@currency=”EUR” and text()]/text()
23.2
15
Get everything following any title with non-English language
//title[ not (@lang=’en’) ]/ following::*
<author>M. Mitchell</author>
<year>1936</year>
<prices>
<price currency="USD">19.05</price>
<price currency="EUR">15</price>
</prices>
Get all names of items with price>20
//price[text()>20]/preceding::title/text()
Pop-Music DVD
Get all items of 20th century
//item[(year/text()>=1901) and (year/text()<=2000)]
or
//item[(year>=1901) and (year<=2000)]
<item new='false'>
<title>Gone with the wind</title>
<author>M. Mitchell</author>
<year>1936</year>
<prices>
<price currency="USD">19.05</price>
<price currency="EUR">15</price>
</prices>
</item>
Get all names of items with price>20
//price[text()>20]/preceding::title/text()
Pop-Music DVD
Get all attributes
//@*
new="true"
lang="en"
currency="USD"
currency="EUR"
new="false"
currency="USD"
currency="EUR"
Get all authors and years
//author | //year
<author>K. A. Bred</author>
<year>2012</year>
<author>M. Mitchell</author>
<year>1936</year>
Get all titles starting with Gone
//title[starts-with(text(), “Gone”)]
<title>Gone with the wind</title>
Get total sum of all USD prices
*Function sum() is supported starting from XPath 2.0
sum(//price[@currency=’USD’])
or longer version:
/list/sum(item/prices/price[@currency=’USD’])
49.04