Match conditionnellement à la valeur du nœud courant
Donné le code XML suivant:
<current>
<login_name>jd</login_name>
</current>
<people>
<person>
<first>John</first>
<last>Doe</last>
<login_name>jd</login_name>
</preson>
<person>
<first>Pierre</first>
<last>Spring</last>
<login_name>ps</login_name>
</preson>
</people>
Comment puis-je obtenir "John Doe" à partir de l'intérieur de l'actuelle/login matcher?
J'ai essayé le suivant:
<xsl:template match="current/login_name">
<xsl:value-of select="../people/first[login_name = .]"/>
<xsl:text> </xsl:text>
<xsl:value-of select="../people/last[login_name = .]"/>
</xsl:template>
OriginalL'auteur Pierre Spring | 2008-09-15
Vous devez vous connecter pour publier un commentaire.
J'avais définir une clé à l'indice de la population:
À l'aide d'une clé ici conserve simplement le code propre, mais vous pouvez également le trouver utile pour l'efficacité si vous êtes souvent d'avoir à récupérer les
<person>
des éléments basés sur leur<login_name>
enfant.J'aurais un modèle qui a renvoyé l'formaté nom d'un
<person>
:Et puis je ferais:
je l'adore! merci ... jamais entendu parler de la xsl:key avant ...
OriginalL'auteur JeniT
Vous voulez
current()
fonctionou un peu plus propre:
OriginalL'auteur jelovirt
Si vous avez besoin d'accéder à de multiples utilisateurs, puis JeniT
<xsl:key />
approche est idéal.Ici est mon alternative de prendre sur elle:
Nous assigner la
<person>
nœud à une variable, nous utilisons alors lesconcat()
fonction de la sortie de la première/dernière noms.Il y a aussi une erreur dans votre exemple XML. Le
<person>
nœud incorrectement se termine avec</preson>
(faute de frappe)Une meilleure solution pourrait être donnée que si nous savions que l'ensemble de la structure du document XML (avec des nœuds racine, etc.)
OriginalL'auteur leekelleher
Je pense qu'il voulait, c'était le remplacement, dans le match pour le "courant" de nœud, pas un match dans la personne d'un nœud:
OriginalL'auteur Kendall Helmstetter Gelner
Juste pour ajouter ma pensée à la pile
Je préfère toujours utiliser les axes de manière explicite dans mon XPath, plus détaillé mais plus claire à mon humble avis.
En fonction de la façon dont le reste des documents XML ressemble (en supposant que ce n'est qu'un fragment), vous pourriez avoir besoin pour contraindre la référence à "l'ancêtre::les gens", par exemple à l'aide de "ancêtre: personnes[1]" pour contraindre les premières personnes ancêtre.
OriginalL'auteur Matt Large