Le mardi 29 novembre 2005 à 22:52 +0100, Stephane Bortzmeyer a écrit :
> On Tue, Nov 29, 2005 at 11:20:07AM +0100,
> Eric van der Vlist <vdv@dyomedea.com> wrote
> a message of 123 lines which said:
>
> > C'est d'ailleurs une première solution : vous pouvez transformer
> > <para> en <div class="para"> et <bloc> en <div class="bloc"> et
> > définir les styles para et bloc pour obtenir la présentation
> > souhaitée.
>
> Je trouve cela dangereux (si l'utilisateur a coupé les CSS, rien ne
> différenciera les deux éléments) et peu dans l'esprit HTML.
D'un autre côté, avec votre solution actuelle, on perd le fait (exprimé
en DocBook) que les éléments <code>, <enum> et autres font partie d'un
même paragraphe.
La "bonne" solution est peut-être de créer un div pour le paragraphe et
des éléments <p>, <pre>, ... imbriqués :
La transformation suivante :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="para">
<div class="para">
<xsl:call-template name="para.code"/>
</div>
</xsl:template>
<xsl:template name="para.code">
<xsl:param name="index" select="0"/>
<xsl:variable name="elementsBloc" select="code|enum"/>
<xsl:variable name="nbElementsBloc" select="count($elementsBloc)"/>
<xsl:variable name="debut" select="node()[count(preceding-sibling::*[count(.|$elementsBloc)
= $nbElementsBloc]) = $index and count(.|$elementsBloc) != $nbElementsBloc]"/>
<xsl:if test="normalize-space($debut)">
<p>
<xsl:apply-templates select="$debut"/>
</p>
</xsl:if>
<xsl:apply-templates select="$elementsBloc[$index + 1]"/>
<xsl:if test="$index < $nbElementsBloc">
<xsl:call-template name="para.code">
<xsl:with-param name="index" select="$index + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="code">
<pre>
<xsl:apply-templates/>
</pre>
</xsl:template>
<xsl:template match="enum">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
</xsl:stylesheet>
Fait cela et génère :
<?xml version="1.0" encoding="utf-8"?>
<blog>
<div class="para">
<p>Ce code : </p>
<pre> printf("Hello\n"); </pre>
<p> fait ca tres bien.</p>
<pre>rm</pre>
<p> hehe</p>
</div>
<div class="para">
<p>Et cet autre para ?</p>
</div>
<div class="para">
<p>Ce troisieme a une enumeration : </p>
<ul>
<item>Un</item>
<item>Deux</item>
</ul>
</div>
</blog>
à partir de :
<?xml version="1.0" encoding="UTF-8"?>
<blog>
<para>Ce code : <code> printf("Hello\n"); </code> fait ca tres
bien.<code>rm</code> hehe</para>
<para>Et cet autre para ?</para>
<para>Ce troisieme a une enumeration : <enum>
<item>Un</item>
<item>Deux</item>
</enum>
</para>
</blog>
Cordialement,
Eric van der Vlist
--
Le premier annuaire des apiculteurs 100% XML!
http://apiculteurs.info/
------------------------------------------------------------------------
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 Wed Nov 30 09:42:33 2005