2010-05-26 4 views
0

Existe-t-il une méthode XPath pour récupérer directement un attribut spécifique des nœuds frères précédents d'un nœud XML à l'aide d'une requête XPath?Récupérer des attributs de nœuds frères précédents précédents

Dans l'exemple suivant, je voudrais récupérer les valeurs de l'attribut alt de chaque img noeuds qui précèdent l'élément div marqué par la 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> 

Pour cet exemple, je veux récupérer les valeurs 1 2 3 4.
J'utilise la requête XPath suivante

//div[@id='marker']/preceding-sibling::img 

afin de récupérer la liste des nœuds que je veux

<img alt="1" src="file.gif"/> 
<img alt="2" src="file.gif"/> 
<img alt="3" src="file.gif"/> 
<img alt="4" src="file.gif"/> 

Comme il est une liste de noeud Je peux alors itérer sur les noeuds pour récupérer la valeur d'attribut I Je cherche, mais y a-t-il une façon XPath de le faire? Je me serais attendu à être capable d'écrire quelque chose comme:

//div[@id='marker']/preceding-sibling::[email protected] 
or //div[@id='marker']/[email protected]::img 

mais je ne sais même pas s'il est possible une fois que vous avez utilisé un XPath Axe comme preceding-sibling.

+0

@skaffman: Puis-je vous demander pourquoi vous avez retiré mon 'sibling' tag s'il vous plait? –

Répondre

5

Utilisation:

//div[@id='marker']/preceding-sibling::img/@alt

Ceci permet de sélectionner tous les attributs (nœuds d'attributs) nom alt de tous img éléments qui sont précédents frères et soeurs d'un élément div (partout dans le document XML) dont id attribut a la valeur 'marker'.

Dans XPath 2.0, vous pouvez même obtenir une séquence de chaînes qui sont les valeurs de ces attributs alt:

//div[@id='marker']/preceding-sibling::img/@alt/string()

+0

Merci beaucoup cela fonctionne comme prévu. –

Questions connexes