From: Eric van der Vlist (vdv@dyomedea.com)
Date: 24/08/2000 - 13:35
Bonjour,
COLLET Laurent TPC-SRD wrote:
>
> Quelqu'un pourrait-il me fournir une solution de formatage qui evite
> l'utilisation de XSL .../...
Pour être tout à fait complet, je joins néanmoins une solution purement
XSL permettant de réaliser cette transformation de manière souple.
Cette transformation est une bonne illustration de la possibilité
d'ajouter dans une feuille de style des éléments de niveau "2" (inclus
dans l'élément document xsl:stylesheet) d'un espace de nom autre que xsl
et de faire référence à la feuille de style elle même avec la fonction
document("").
Cela permet de construire des feuilles de style dans lesquelles on peut
séparer données et traitement:
----------------
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:el="
mailto:vdv@dyomedea.com">
<el:elements>
<DTM>
<DAF/>
<CPF/>
<DEF/>
</DTM>
<BGM>
<att1/>
<att2/>
<att3/>
</BGM>
<RCT>
<att1/>
<att2/>
<att3/>
<att4/>
</RCT>
<CTA>
<att1/>
<att2/>
<att3/>
<att4/>
<att5/>
<att6/>
<att7/>
</CTA>
</el:elements>
<xsl:template match="*" mode="attributs">
<xsl:param name="chaine"/>
<xsl:attribute name="{name()}">
<xsl:value-of select="substring-before($chaine, ';')"/>
</xsl:attribute>
<xsl:apply-templates select="following-sibling::*[position()=1]"
mode="attributs">
<xsl:with-param name="chaine" select="substring-after($chaine,
';')"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="*">
<xsl:variable name="name" select="name()"/>
<xsl:choose>
<xsl:when
test="document('')/xsl:stylesheet/el:elements/*[name()=$name]">
<xsl:element name="{$name}">
<xsl:apply-templates
select="document('')/xsl:stylesheet/el:elements/*[name()=$name]/*[position()=1]"
mode="attributs">
<xsl:with-param name="chaine" select="concat(string(), ';')"/>
</xsl:apply-templates>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
-------------
Cette transformation a été testée sous XT et MSXML3.
Cordialement,
Eric
--
------------------------------------------------------------------------
Eric van der Vlist Dyomedea http://dyomedea.com
http://xmlfr.org http://4xt.org http://ducotede.com
------------------------------------------------------------------------
--
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:05 UTC
webmaster@xmlfr.org
|