2010-04-14 25 views
3

J'ai un document XML donné (la structure ne peut pas être modifiée) et je veux obtenir les commentaires qui sont écrits au-dessus des nœuds. Le document ressemble à ceci: Donc, les commentaires sont facultatifsUtiliser XPath pour accéder aux commentaires une hiérarchie plate

<!--Some comment here-->  
    <attribute name="Title">Book A</attribute> 
    <attribute name="Author"> 
     <value>Joe Doe</value> 
     <value>John Miller</value> 
    </attribute> 
<!--Some comment here--> 
    <attribute name="Code">1</attribute> 

, mais s'il y en a un, je veux obtenir le commentaire ci-dessus chaque attribut. L'utilisation de /*/comment()[n] me donnerait un commentaire n, mais pour n = 2, j'obtiendrais naturellement le commentaire du troisième attribut, donc il n'y a pas de lien entre les attributs et les commentaires. Des idées? Merci

Répondre

0

Utilisation:

//comment()[following-sibling::*[1][self::attribute]] 

Ceci est plus compact et précise que la réponse actuellement sélectionnée. L'abréviation // est nécessaire, car aucun document XML bien formé n'a été fourni et le niveau d'imbrication des nœuds de commentaires n'est pas connu.

+0

Je vois, merci – Sebastian

1

Si vous voulez sélectionner les commentaires qui sont suivis par un élément attribute, alors cela devrait fonctionner:

/*/comment()[following-sibling::*[position()=1 and name()='attribute']] 
+0

super, c'était exactement ce que je cherchais. Merci – Sebastian