Thread View: fr.comp.text.xml
5 messages
5 total messages
Started by Rapha�l THERY
Mon, 27 Nov 2000 00:00
Casse tete chinois
Author: Rapha�l THERY
Date: Mon, 27 Nov 2000 00:00
Date: Mon, 27 Nov 2000 00:00
44 lines
1806 bytes
1806 bytes
Je ne maitrise pas encore tr�s bien XPath
J'ai le cas suivant, soit un fichier xml contenant:
<Objets>
<Objet nom="xxx" lib="xxxxxxx" />
<Objet nom="yyy" lib="xxxxxxx" />
<Objet nom="zzz" lib="xxxxxxx" />
<Objet nom="111" lib="xxxxxxx" />
<Objet nom="222" lib="xxxxxxx" />
</Objets>
... que j'inclus dans un autre fichier xml par le biais d'un xsl:variable
globale (dans une feuille de styles)
ce fichier ressemble �
<Entity nom="xxx">
....
</Entity>
Je voudrais cr�er un fichier xml suivant :
<Entity nom="xxx" lib="xxxxxxxxxxx" >
....
</Entity>
or je ne sais pas cr�er la r�gle g�n�rique qui dit "ajoute l'attribut lib en
fonction du contenu de l'attribut nom"
j'ai fais un truc comme cela ...
<xsl:attribute name="lib">
<xsl:apply-templates select="$dico/Objets/Objet[@nom='{$nomTable}']" />
</xsl:attribute>
<xsl:template match="//Objets/Objet[@nom='{$nomTable}']">
<xsl:value-of select="@lib"/>
</xsl:template>
mais bien �videmment cela ne marche pas :-(
Quelqu'un aurait une id�e ?
Rapha�l
(question : y a un moyen pour changer la casse, du genre mettre tout en
minuscule).
Re: Casse tete chinois
Author: Rapha�l THERY
Date: Mon, 27 Nov 2000 00:00
Date: Mon, 27 Nov 2000 00:00
62 lines
2353 bytes
2353 bytes
J'ai trouv� !
(il suffit d'enlever les accolades et guillemets)
> <xsl:attribute name="lib">
> <xsl:apply-templates select="$dico/Objets/Objet[@nom=$nomTable]" />
> </xsl:attribute>
>
> <xsl:template match="//Objets/Objet">
> <xsl:value-of select="@lib"/>
> </xsl:template>
>
Rapha�l THERY <raphael.thery@nordnet.fr> a �crit dans le message :
jotU5.93$CX3.416866@nnrp1.proxad.net...
> Je ne maitrise pas encore tr�s bien XPath
> J'ai le cas suivant, soit un fichier xml contenant:
>
> <Objets>
> <Objet nom="xxx" lib="xxxxxxx" />
> <Objet nom="yyy" lib="xxxxxxx" />
> <Objet nom="zzz" lib="xxxxxxx" />
> <Objet nom="111" lib="xxxxxxx" />
> <Objet nom="222" lib="xxxxxxx" />
> </Objets>
>
> ... que j'inclus dans un autre fichier xml par le biais d'un xsl:variable
> globale (dans une feuille de styles)
> ce fichier ressemble �
>
> <Entity nom="xxx">
> ....
> </Entity>
>
> Je voudrais cr�er un fichier xml suivant :
>
> <Entity nom="xxx" lib="xxxxxxxxxxx" >
> ....
> </Entity>
>
> or je ne sais pas cr�er la r�gle g�n�rique qui dit "ajoute l'attribut lib
en
> fonction du contenu de l'attribut nom"
>
> j'ai fais un truc comme cela ...
> <xsl:attribute name="lib">
> <xsl:apply-templates select="$dico/Objets/Objet[@nom='{$nomTable}']" />
> </xsl:attribute>
>
> <xsl:template match="//Objets/Objet[@nom='{$nomTable}']">
> <xsl:value-of select="@lib"/>
> </xsl:template>
>
> mais bien �videmment cela ne marche pas :-(
>
> Quelqu'un aurait une id�e ?
> Rapha�l
>
> (question : y a un moyen pour changer la casse, du genre mettre tout en
> minuscule).
>
>
>
Re: Casse tete chinois
Author: Alain Ketterlin
Date: Tue, 28 Nov 2000 00:00
Date: Tue, 28 Nov 2000 00:00
41 lines
2026 bytes
2026 bytes
"Rapha�l THERY" <raphael.thery@nordnet.fr> writes:
> j'ai fais un truc comme cela ...
> <xsl:attribute name="lib">
> <xsl:apply-templates select="$dico/Objets/Objet[@nom='{$nomTable}']" />
> </xsl:attribute>
Essaie
<xsl:apply-templates select="$dico/Objets/Objet[@nom=$nomTable]"/>
> <xsl:template match="//Objets/Objet[@nom='{$nomTable}']">
<xsl:template match="Objet"> ...
devrait suffire. Dans ta version // n'est pas utile dans match. De
toute facon il fait reference au document courant (c'est-a-dire celui
en cours de traitement). Si tu as d'autres templates sur Objet pour
faire autre chose, tu peux utiliser mode pour lever les ambiguites. En
plus, ca oblige la variable nomTable a etre globale.
Pour ce que tu veux faire, je suggere :
<xsl:element name="Entity">
<xsl:attribute name="nom"><xsl:value-of
select="$nomTable"/></xsl:attribute>
<xsl:attribute name="lib"><xsl:value-of
select="$dico/Objets/Objet[@nom=$nomTable]/@lib"/></xsl:attribute>
....
</xsl:element>
Mais on peut faire plus court. Peut-etre :
<Entity nom="{$nomTable}">
<xsl:attribute name="lib"><xsl:value-of
select="$dico/Objets/Objet[@nom=$nomTable]/@lib"/></xsl:attribute>
....
</Entity>
(Et pardon pour le formatage, c'est pour rester dasn les 80 colonnes.)
-- Alain.
Re: Casse tete chinois
Author: Rapha�l THERY
Date: Wed, 29 Nov 2000 00:00
Date: Wed, 29 Nov 2000 00:00
51 lines
2442 bytes
2442 bytes
Merci beaucoup pour ces diff�rentes "approches", elles m'aideront � mieux
comprendre et appr�hender XSLT !
Rapha�l
Alain Ketterlin <alain@dpt-info.u-strasbg.fr> a �crit dans le message :
wyaeakv7bp.fsf@polya.u-strasbg.fr...
> "Rapha�l THERY" <raphael.thery@nordnet.fr> writes:
>
> > j'ai fais un truc comme cela ...
> > <xsl:attribute name="lib">
> > <xsl:apply-templates select="$dico/Objets/Objet[@nom='{$nomTable}']"
/>
> > </xsl:attribute>
>
> Essaie
> <xsl:apply-templates select="$dico/Objets/Objet[@nom=$nomTable]"/>
>
> > <xsl:template match="//Objets/Objet[@nom='{$nomTable}']">
>
> <xsl:template match="Objet"> ...
>
> devrait suffire. Dans ta version // n'est pas utile dans match. De
> toute facon il fait reference au document courant (c'est-a-dire celui
> en cours de traitement). Si tu as d'autres templates sur Objet pour
> faire autre chose, tu peux utiliser mode pour lever les ambiguites. En
> plus, ca oblige la variable nomTable a etre globale.
>
> Pour ce que tu veux faire, je suggere :
>
> <xsl:element name="Entity">
> <xsl:attribute name="nom"><xsl:value-of
> select="$nomTable"/></xsl:attribute>
> <xsl:attribute name="lib"><xsl:value-of
>
select="$dico/Objets/Objet[@nom=$nomTable]/@lib"/></xsl:attribute>
> ....
> </xsl:element>
>
> Mais on peut faire plus court. Peut-etre :
>
> <Entity nom="{$nomTable}">
> <xsl:attribute name="lib"><xsl:value-of
>
select="$dico/Objets/Objet[@nom=$nomTable]/@lib"/></xsl:attribute>
> ....
> </Entity>
>
> (Et pardon pour le formatage, c'est pour rester dasn les 80 colonnes.)
>
> -- Alain.
Re: Casse tete chinois
Author: Tom.
Date: Wed, 29 Nov 2000 00:00
Date: Wed, 29 Nov 2000 00:00
18 lines
1501 bytes
1501 bytes
In article <jotU5.93$CX3.416866@nnrp1.proxad.net>, "Rapha�l THERY"
<raphael.thery@nordnet.fr> wrote:
> <xsl:template match="//Objets/Objet[@nom='{$nomTable}']">
En passant : http://www.w3.org/TR/xslt#rules
"It is an error for the value of the match attribute to contain a
VariableReference."
Et http://www.w3.org/TR/xslt#attribute-value-templates, lire la NOTE.
Noter aussi que dans les r�f�rences (regroup�es en Appendix B), un
attribute value template est not� explicitement par mise entre
accolades des valeurs possibles (cf. http://www.w3.org/TR/xslt#notation )
Le //Objets/ peut �tre utile dans le cas o� on utilise d'autres source
trees (via la fonction document()). Ce template ne vaudra alors que
pour les noeuds du "document courant", celui qui n'a pas �t� acc�d� via
document(), celui qui "appelle" directement la feuille XSLT.
Tom.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads