From: cyril vidal (cyr.vidal@wanadoo.fr)
Date: 27/12/2002 - 13:58
Bonjour,
>
> Avez-vous vu "Keys across multilple (sic) input files" à
> http://www.dpawson.co.uk/xsl/sect2/N4852.html#d4277e106 ?
>
> Cela vous aide-t-il à trouver la solution ?
Merci pour ce lien que je ne connaissais pas.
En fait, autant l'explication qui est y donnée que celle fournie par le W3C
http://www.w3.org/TR/xslt#key, concerne la façon d'utiliser à partir d'un
document principal des clés définies sur un autre document (c'est-à-dire
retrouvant des éléments de documents externes), en utilisant comme valeur de
la clé une valeur du document principal (le plus souvent sous la forme d'une
variable).
Ce que j'essayais de faire pour ma part était à peu près l'inverse:
retrouver des éléments à partir d'une clé définie sur le document principal
(retrouvant des éléments du document principal, ici personnes) à partir
d'une valeur fournie par un autre document. Je ne crois pas que ce soit
possible.
Cela est mis en évidence par le pb n°10 de la page que vous avez fournie en
lien:
10.
"Problem with keys
Michael Kay
The key() function looks for nodes that are in the same document as the
context node. Your xsl:for-each is changing the context node to be one in a
different document. "
Si je reprends mon code, cela devient clair:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:svg="http://www.w3.org/2000/svg">
<xsl:output method="xml" encoding="iso-8859-1" indent="yes"/>
<!-- définition d'une clé sur les éléments personne du document xml
'principal' -->
<xsl:key name="cle_lieu" match="//personne" use="lieu"/>
<xsl:variable name="calque" select="document('calque.svg')"/>
<xsl:template match="/">
<svg width="756.172pt" height="1149.04pt" viewBox="0 0 756.172 1149.04" >
<!-- ici, j'obtiens bien un résultat, la clé est bien trouvée car le noeud
contexte est la racine du document, et les éléments personne font partie de
ce document -->
<xsl:value-of select="key('cle_lieu','1101')"/>
<xsl:for-each select="$calque//svg/g[@class='fonds']/path">
<!-- ici, la clé n'est pas trouvée, je n'obtiens aucun résultat en
sortie, parce que le noeud contexte fait partie du document calque.svg, et
que les éléments
personne n'en font pas partie -->
<xsl:value-of select="key('cle_lieu','1101')"/>
<xsl:variable name="bureau" select="@class"/>
...
</xsl:for-each>
...
</svg>
</xsl:template>
</xsl:stylesheet>
Cordialement,
Cyril.
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|