🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.text.xml
Article #142

Re: Xslt avec une seconde base xml

#142
From: Alain Ketterlin
Date: Mon, 04 Jan 2010 19:56
62 lines
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-mail
References: <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=