2009-08-13 7 views
0

J'ai un document XML comme ceci:Sélectionnez le même attribut dans XPath et renvoyer le résultat sans répétition

<wii> 
    <game> 
    <type genre="arcade" /> 
    <type genre="sport" /> 
    </game> 
    <game> 
    <type genre="platform" /> 
    <type genre="arcade" /> 
    </game> 
</wii> 

Comment lister tous les genres sans répétition en utilisant seulement XPath?

Merci.

+0

Je pourrais fournir une solution, mais il contiendrait XSLT également – Dewfy

+0

La réponse de Tomalak devrait vous donner ce que vous voulez. Vraisemblablement, le deuxième élément de jeu manque-t-il de sa balise de fermeture en raison d'une erreur de copier/coller? –

+0

Correction maintenant, merci. –

Répondre

5
 
/wii/game/type/@genre[not(. = preceding::type/@genre)] 

En clair ce sélectionne tout @genre noeud d'attribut pour lequel il n'y a pas de noeud @genre évalués également dans la partie précédente du document.

L'opérateur d'égalité =, lorsqu'il est donné une valeur simple et un ensemble de nœuds, il compare la valeur simple pour chaque nœud dans l'ensemble de nœuds, retour true que si tout le match nœuds (noter que != ne le fait pas faites-le, il ne compare qu'avec le premier noeud de l'ensemble!). Le résultat doit être annulé avec not().

0

Avez-vous essayé la fonction distinct-values ​​()?

distinct-values(//type/@genre) 

Il est évidemment inutile si cette fonction n'est pas disponible pour vous.

Here's a link à une approche qui utilise uniquement XPath.

+0

Merci, mais ce n'est pas disponible .. –

Questions connexes