Bonjour,
Le jeudi 16 décembre 2004 à 17:07 +0100, Neric a écrit :
> Bonjour,
>
> Je suis débutant dans le monde XML - XSL, et j'ai un problème.
> Je n'arrive pas à transformer le contenu d'une balise.
Si je peux me permettre d'être pointilleux, une balise est
"<detail_struct>" (balise de début) ou "</detail_struct>" (balise de
fin) et XSLT ne permet pas d'accéder aux balises en tant que telles. Ce
que vous voulez transformer c'est donc le contenu d'un élément et non
d'une balise :-) ...
>
> Voici un bout de mon XML
>
> ...
> <structure nb_col="3" nb_niv="1">
> <detail_struct>
> <val><texte>au 01.08.2004</texte></val>
> </detail_struct>
> <detail_struct>
> <val><texte>Taux de l'épargne<BR/>Prime d'Etat
> comprise<ref_note>*</ref_note></texte></val>
> </detail_struct>
> <detail_struct>
> <val><texte>Taux du prêt</texte></val>
> </detail_struct>
> </structure>
> ...
>
>
> et voici mon code XSL correspondant :
>
> ...
> <table>
> <tr>
> <xsl:for-each select="structure/detail_struct">
> <td><xsl:value-of select="val/texte"/></td>
> </xsl:for-each>
> </tr>
> </table>
> ...
>
>
>
> Mon problème se situe à cet endroit du XML :
> <texte>Taux de l'épargne<BR/>Prime d'Etat
> comprise<ref_note>*</ref_note></texte>
>
> 1/ le <BR/> : je voudrais qu'il apparaisse dans mon html, hors là, il
> disparait
> 2/ la balise <ref_note>, je voudrais transformer * en <sup>*</sup>
>
> Je n'ai aucune idée de comment faire cela, car les balise sont
> imbriquées. Si <ref_note> était en dehors de texte, je n'aurais pas eu
> de problème, mais là je sèche...
Il ne faut pas utiliser xsl:value-of qui converti le noeud sélectionné
en chaîne de caractères.
Si vous n'aviez pas besoin de convertir certains éléments, vous pourriez
remplacer votre xsl:value-of par xsl:copy-of qui copierait ce que vous
sélectionnez en en gardant la structure.
Puisque vous voulez transformer certains éléments, il faut utiliser des
templates :
...
<table>
<tr>
<xsl:for-each select="structure/detail_struct">
<td><xsl:apply-templates select="val/texte" mode="texte"/></td>
</xsl:for-each>
</tr>
</table>
...
<!-- l'utilisation du mode "texte" permet d'éviter d'interférer avec les
templates que vous avez déjà écrit -->
<xsl:template match="texte" mode="texte">
<!-- On s'intéresse au contenu de l'élément texte, on applique donc
les templates -->
<xsl:apply-templates mode="texte"/>
</xsl:template>
<xsl:template match="ref_note" mode="texte">
<!-- on transforme cet élément en "sup" -->
<sup>
<xsl:apply-templates mode="texte"/>
</sup>
</xsl:template>
<xsl:template match="*" mode="texte">
<!-- On recopie les autres éléments avec leurs attributs -->
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates mode="texte"/>
</xsl:copy>
</xsl:template>
Cordialement,
Eric van der Vlist
--
Tired of typing XML tags?
http://wikiml.org
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
(ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
--
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)
Received on Thu Dec 16 18:34:03 2004