Article View: fr.comp.text.xml
Article #142Re: Xslt avec une seconde base xml
From: Alain Ketterlin
Date: Mon, 04 Jan 2010 19:56
Date: Mon, 04 Jan 2010 19:56
62 lines
3430 bytes
3430 bytes
CrazyCat <crazycat@c-p-f.org> writes:
> Je dois faire une transformation XSL sur un fichier (jusque là pas de
> problème), et ce fichier contient des identifiants qui doivent me
> permettre de retrouver des libellés présents dans un autre fichier
> XML.
> <xsl:template match='Locations'>
> <xsl:for-each select='Location'>
> <xsl:value-of select="ZipCode" /> :
> <xsl:variable name="CityId"
> select="document('/home/user/Cities.xml', /CityId)" />
> <xsl:value-of select="$CityId/@CityId" />
> </xsl:for-each>
> </xsl:template>
> </xsl:stylesheet>
Si le fichier ne dépend vraiment pas du contexte, autant le mettre dans
une variable globale (pour éviter le coût avec les processeurs qui
n'optimiseraient pas).
D'autre part, pourquoi /CityId comme second paramètre ? Cet élément
n'existe pas. J'imagine que tu veux que le fichier Cities.xml soit
recherché dans "le même répertoire" que le fichier initial. Le second
argument de document() sert bien à cela, mais encore faut-il qu'il
existe... En plus tu donnes un chemin absolu. Je te conseille de relire
la section portant sur document() dans la recommandation XSLT. Pour ton
cas, je te suggère :
- soit document("Cities.xml",/)
- soit document("/home/user/Cities.xml")
Enfin, $CityId/@CityId recherche l'attribut CityId dans l'élément
désigné par $CityId. Ce n'est pas non plus ce que tu cherches. Tu
cherches dans le document de racine $CityId l'élément City dont
l'attribut CityId a la même valeur que l'élément CityId de l'élément
contextuel. En clair : $CityId/Cities/City[@CityId=current()/CityId]
mais je te conseille de passer par une variable, puisque tout porte le
même nom.
> Mon fichier initial est de la forme:
> <?xml version="1.0" encoding="utf-8"?>
> <root>
> <Locations>
> <Location>
> <Address>Une adresse</Address>
> <ZipCode>75000</ZipCode>
> <CityId>1</CityId>
> </Location>
> </Locations>
> </root>
>
> Et mon fichier Cities.xml de la forme:
> <Cities>
> <City CityId="1">Paris</City>
> <City CityId="2">Lyon</City>
> </Cities>
-- Alain.
Technical Details
Message-ID:
<871vi54pa0.fsf@dpt-info.u-strasbg.fr>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!proxad.net!feeder1-2.proxad.net!news.in2p3.fr!in2p3.fr!univ-lyon1.fr!jussieu.fr!not-for-mailReferences:
<hht9da$692$1@speranza.aioe.org>Show Full Headers
Complete Article Headers
X-Google-Thread: 8a75585569,ea8c1daf85e4d2b6 X-Google-Attributes: gid8a75585569,public,usenet X-Google-NewGroupId: yes X-Google-Language: FRENCH,UTF8 Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!proxad.net!feeder1-2.proxad.net!news.in2p3.fr!in2p3.fr!univ-lyon1.fr!jussieu.fr!not-for-mail From: Alain Ketterlin <alain@dpt-info.u-strasbg.fr> Newsgroups: fr.comp.text.xml Subject: Re: Xslt avec une seconde base xml Date: Mon, 04 Jan 2010 20:56:55 +0100 Organization: Universites Paris VI/Paris VII - France Lines: 62 Message-ID: <871vi54pa0.fsf@dpt-info.u-strasbg.fr> References: <hht9da$692$1@speranza.aioe.org> NNTP-Posting-Host: vpn-dpt-info-11.u-strasbg.fr Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: vishnu.jussieu.fr 1262635017 79716 130.79.6.170 (4 Jan 2010 19:56:57 GMT) X-Complaints-To: usenet@vishnu.jussieu.fr NNTP-Posting-Date: Mon, 4 Jan 2010 19:56:57 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux) Cancel-Lock: sha1:uSRswOGElsPryrF99U8rFBdxyZQ=