[XPATH] Retrieve specific preceding sibling nodes attributes
- by Matthieu BROUILLARD
Is there an XPath way of recovering directly one specific attribute of preceding sibling nodes of an XML node using an XPath query?
In the following example, I would like to retrieve the values of the alt attribute of each img nodes that precede the div element marked with the id=marker.
<content>
<img alt="1" src="file.gif" />
<img alt="2" src="file.gif" />
<img alt="3" src="file.gif" />
<img alt="4" src="file.gif" />
<div id='marker'></div>
</content>
For this example, I want to retrieve the values 1 2 3 4.
I use the following XPath query
//div[@id='marker']/preceding-sibling::img
in order to retrieve the node list I want
<img alt="1" src="file.gif"/>
<img alt="2" src="file.gif"/>
<img alt="3" src="file.gif"/>
<img alt="4" src="file.gif"/>
As it is a node list I can then iterate on the nodes to retrieve the attribute value I am looking for, but is there an XPath way of doing it?
I would have expected to be able to write something like:
//div[@id='marker']/preceding-sibling::img@alt
or //div[@id='marker']/preceding-sibling@alt::img
but I don't even know if it is possible once you have used an XPath Axe like preceding-sibling.