Comment sélectionner des nœuds uniques
J'ai trouvé cette page décrivant les Muenchian méthode, mais je pense que je vais l'application de ce mal.
Considèrent que ce serait le retour à un ensemble d'âges:
/doc/class/person/descriptive[(@name='age')]/value
1..2..2..2..3..3..4..7
Mais j'aimerais un ensemble de nœuds un nœud pour chaque âge.
1..2..3..4..7
Chacun de ces semblent retourner toutes les valeurs, au lieu de valeurs uniques:
/doc/class/person/descriptive[(@name='age')][not(value=preceding-sibling::value)]/value
/doc/class/person/descriptive[(@name='age')]/value[not(value=preceding-sibling::value)]
Ce qui me manque?
source d'informationauteur pc1oad1etter
Vous devez vous connecter pour publier un commentaire.
Voici un exemple:
Et le XPath:
Résultats:
A B C D
MODIFIER:
Comme mousio commenté ce n'est pas capturer le dernier élément dans une liste si c'est le seul moment où il apparaît. De prendre et de Fëanor de consultation en compte, voici une meilleure solution:
Ici est la Muenchian version de BQ de réponse à l'aide de ses données:
Cette transformation donne
Un
B
C
D
key()
de recherche ci-dessus dans le modèle pouritem
retourne un ensemble de nœuds contenant tous lesitem
éléments ayant la même valeur de chaîne comme le nœud de contexte.generate-id()
sont garantis pour générer le même ID pour un nœud donné lors d'un passage au travers d'un document.key()
appel.Pour ceux qui recherchent encore un select distinct dans XSLT:
Avec XSLT 2.0,
vous pouvez utiliser
"distinct-values(/doc/classe/personne/descriptif[(@name= "age")]/valeur)"
La Muenchian méthode utilise des clés pour créer une liste d'éléments de l'ensemble de nœuds. Pour vos données, la clé devrait ressembler à ceci:
À partir de là, je serais personnellement utiliser
xsl:apply-templates
mais vous pouvez utiliser les éléments suivantsselect
attribut dans d'autres lieux:L'accompagnement de match pour le ci-dessus est beaucoup plus simple:
N'êtes-vous pas manque une référence à "descriptif" juste après le précédent,-de la valeur? Quelque chose comme ce qui suit:
(Ne l'ai pas testé)