2010-07-26 3 views
3

Je sais que si j'ai un fichier XML comme ceci:L'utilisation de deux éléments pour xsl: key

<persons> 
    <class name="English"> 
     <person name="Tarzan" id="050676"/> 
     <person name="Donald" id="070754"/> 
     <person name="Dolly" id="231256"/> 
    </class> 
    <class name="Math"> 
     <person name="Winston" id="050677"/> 
     <person name="Donald" id="070754"/> 
     <person name="Fred" id="231257"/> 
    </class> 
</persons> 

je peux définir une clé dans un fichier XSL comme ceci:

<xsl:key name="preg" match="person" use="@id"/> 

où J'utilise id comme clé. Cependant, Donald est répertorié deux fois, mais est seulement dans un endroit en phase de préparation.

Supposons que je le veuille deux fois en liste. C'est-à-dire que je veux que le nom de la classe fasse partie de l'identifiant. Fondamentalement, je veux que preg ait des clés équivalentes aux paires ordonnées: (nom-classe, id). Comment puis-je faire cela (en utilisant XSLT 1.0)?

+0

XSLT 1.0 ou 2.0? –

Répondre

6

Concaténer les clés? Que diriez-vous

use="concat(../@name, @id)" 

Ceci servirait à les garder séparés dans l'index. Vous devrez bien sûr utiliser la même clé pour les récupérer. Pour éviter toute ambiguïté, je voudrais également inclure un délimiteur qui ne se produira pas dans les deux sous-clé, comme dans

use="concat(../@name, '|', @id)" 

Ceci est l'approche recommandée dans la référence XSLT2 de Michael Kay.

Questions connexes