From: Eric van der Vlist (vdv@dyomedea.com)
Date: 21/09/2000 - 11:43
Pierre Attar wrote:
>
> Bien, je comprend la réponse. Du coup, j'ai un problème d'ordre
> méthodologique lié à l'expression de programmes selon des arbres bien formés.
C'est en effet un des cas qui nous obligent, en utilisant XSLT, à penser
differemment...
En l'occurrence, s'il s'agit d'affecter des attributs de presentation
différents suivant les 6 niveaux de style et d'avoir un traitement
commun en "dessous" du fo:block, une première solution peut être:
<xsl:template match="S1">
<fo:block xsl:use-attribute-set="S1-para-att">
<xsl:call-template name="commun"/>
</fo:block>
</xsl:template>
.../...
<xsl:template match="S6">
<fo:block xsl:use-attribute-set="S1-para-att">
<xsl:call-template name="commun"/>
</fo:block>
</xsl:template>
puis
<xsl:template name="commun">
Traitement commun.
</xsl:template>
On peut également trouver d'autres solutions en remplaçant le
xsl:use-attribute-set par d'autres constructions.
A titre d'exemple,
----------
<?xml version='1.0' encoding='ISO-8859-1'?>
<doc>
<S1>niveau1
<S2>niveau2</S2>
</S1>
</doc>
----------
transformé par:
----------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:att="mailto:vdv@dyomedea.com"
exclude-result-prefixes="att">
<att:attributes>
<S1 font-size="14pt" x="y"/>
<S2 font-size="12pt"/>
</att:attributes>
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="S1|S2">
<fo:block>
<xsl:copy-of
select="document('')/xsl:stylesheet/att:attributes/*[name()=name(current())]/@*"/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
----------
donne
----------
<?xml version="1.0" encoding="utf-8"?>
<doc>
<fo:block font-size="14pt" x="y"
xmlns:fo="http://www.w3.org/1999/XSL/Format">niveau1
<fo:block font-size="12pt">niveau2</fo:block>
</fo:block>
</doc>
----------
Cordialement,
Eric
> En toute logique, ce que je voudrais faire serait :
>
> <xsl:template match="S1|S2">
> <xsl:choose>
> <xsl:when test="name()='S1'">
> <fo:block xsl:use-attribute-set="{$attrSet}">
> </xsl:when>
> <xsl:when test="name()='S1'">
> <fo:block xsl:use-attribute-set="{$attrSet}">
> </xsl:when>
> </xsl:choose>
> <xsl:apply-templates />
> </fo:block>
> </xsl:template>
>
> Mais cela ne marche pas car ce n'est pas un arbre bien formé, en ce qui
> concerne le fo:block. Pourtant, c'est quand même ce que l'on veut assez
> souvent faire : agir sur les attributs d'un élément seulement.
>
> On y arrive, quand on peut décaler à un niveau inférieur le choose ... mais
> pour le coup, je ne vois pas comment déclarer l'élément puis, à
> l'intérieur, mettre en place mon choose.
>
> En effet, je ne vois pas où, dans la spécification, il est possible d'avoir
> quelque chose comme :
>
> <fo:block>
> <xsl:attribute>use-attribute-set ....</xsl:attribute>
> </fo:block>
>
> Si j'ai bien compris, use-attribute-set ne s'applique qu'a des éléments ou
> a des attribute-set.
>
> Note que ceci n'est pas une question réthorique, dans mon exemple, il y a 6
> niveaux de titres et je fais beaucoup d'autres choses à l'intérieur.
>
> Pierre
>
> --
> 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)
--
------------------------------------------------------------------------
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
|