Showing posts with label XPath. Show all posts
Showing posts with label XPath. Show all posts

Monday, October 19, 2015

Using preceding-sibling and following-sibling in xpath

In this article I will show few examples about how to use following-sibling and preceding-sibling

Our XML example we are going to use.
 <div id="cities">  
 <country>France</country>  
   <city>Paris</city>  
   <country>UK</country>  
   <city>London</city>  
   <city>Manchester</city>  
   <city>Liverpool</city>  
   <country>Denmark</country>  
   <city>Copenhagen</city>  
   <country>Ukraine</country>  
   <city>Kiev</city>  
   <city>Odessa</city>  
 </div>  

Taking all city elements after element UK

 /div/country[.='UK']/following-sibling::city  
 <city>London</city>  
 <city>Manchester</city>  
 <city>Liverpool</city>  
 <city>Copenhagen</city>  
 <city>Kiev</city>  
 <city>Odessa</city>  

Taking all city elements before element Denmark

 /div/country[.='Denmark']/preceding-sibling::city  
 <city>Paris</city>  
 <city>London</city>  
 <city>Manchester</city>  
 <city>Liverpool</city>  

Let's increase difficulty little bit and try to use preceding-sibling and following-sibling in the brackets []

Taking all city elements following till first country is UK

 /div/city[following-sibling::country='Denmark']  
 <city>Paris</city>  
 <city>London</city>  
 <city>Manchester</city>  
 <city>Liverpool</city>  

Taking all city elements from bottom till first country is Denmark

 /div/city[preceding-sibling::country='Denmark']  
 <city>Copenhagen</city>  
 <city>Kiev</city>  
 <city>Odessa</city>  

Let's increase difficulty even more and start using both preceding-sibling and following-sibling in one xpath.

Taking all city elements between two elements

In this example I'm going to get cities after UK and before Ukraine.
 /div/city[preceding-sibling::country='UK' and following-sibling::country='Ukraine']  
 <city>London</city>  
 <city>Manchester</city>  
 <city>Liverpool</city>  
 <city>Copenhagen</city>