From: Benoit Lefevre (benoit.lefevre@effix.fr)
Date: 07/08/2001 - 17:26
Re bonjour.
Merci Paul pour tes conseils.
J'ai resolue mon precedent probleme en utilisant le template suivant :
--------------------------------------------
|<xsl:template match="*">
|<xsl:copy/><xsl:if test = "not(./text())">
|<xsl:apply-templates/>
|</xsl:if>
|</xsl:template>
-------------------------------------------
Qui me semble moins beau que ce que tu proposes
Mais je me pose encore quelques questions :
1) quels sont les differences fondamentales entre "." , "self" et "current()" ?
Y at-il une difference (pour ces trois elements du langage en tous cas)
lorsqu'on les emplois :
- dans un attribut match
- dans un attribut test
- dans un attribut select
J'ai l'impression d'etre passe 10 fois a cote de la solution a cause de
petites variations sur l'emplois de tous ces elements que je ne maitrise
pas encore ...
2) peut on "deporter" le test <xsl:If> du template directement dans l'attribut
match de ce dernier sans avoir recoure a plusieurs templates ??
3) Je ne souhaite pas conserver la structure, mais par contre j'ai toujours
un mal fou lorsque je fait du output en mode text a indenter la sortie comme
je le souhaite.Je ne comprend pas comment les blancs dans le document
source sont pris en compte lors de la transformation.
Par exemple ... si j'applique le template presente precedement sur le
document suivant :
------------------------------------------
|<a><b><a>text</a><d>text</d></b><c><e>text</e></c></a>
------------------------------------------
J'ai bien le formatage attendue :
------------------------------------------
|<a><b><a><d><c><e>
------------------------------------------
alors que si j'applique le template :
--------------------------------------------
|<xsl:template match="*">
|<xsl:copy/>
|<xsl:if test = "not(./text())">
|<xsl:apply-templates/>
|</xsl:if>
|</xsl:template>
-------------------------------------------
qui comporte un retour a la ligne supplementaire apres le copy, J'ai
la sortie suivante :
------------------------------------------
|<a>
|<b>
|<a>
|<d>
|<c>
|<e>
------------------------------------------
J'en deduit donc que tous le texte suplementaire apres un <copy>
est pris en compte. Or si j'applique le template suivant :
--------------------------------------------
|<xsl:template match="*">
|<xsl:copy/>
|
|<xsl:if test = "not(./text())">
|<xsl:apply-templates/>
|</xsl:if>
|</xsl:template>
-------------------------------------------
Rien ne change !!?
Et enfin si j'ajoute du texte entre ces deux retours a la ligne
comme ceci :
--------------------------------------------
|<xsl:template match="*">
|<xsl:copy/>
|ploki
|<xsl:if test = "not(./text())">
|<xsl:apply-templates/>
|</xsl:if>
|</xsl:template>
-------------------------------------------
Cette fois ci je passe d'un seul coup d'un seul a une sortie formate comme suit :
--------
|<a />
|
|ploki
|
|<b />
|
|ploki
|
|<a />
|
|ploki
|
|<d />
|
|ploki
|
|<c />
|
|ploki
|
|<e />
|
|ploki
--------
C'est a n'y rien comprendre ...
Cordialement
benoit lefevre
--
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
|