From: Eric van der Vlist (vdv@dyomedea.com)
Date: 03/01/2001 - 08:12
Bonjour,
Laurent CAPRANI wrote:
>
> Est-il possible de regrouper des séquences d'éléments de même nom avec XSLT
> ?
Oui...
C'est une question qui revient fréquemment (voir par exemple [1]) et que
je vais rajouter dans notre section FAQ.
[1] http://xmlfr.org/listes/xml-tech/2000/0445.html
Sans être très simple, c'est possible en XSLT à condition de travailler
en "pas à pas" et c'est une des raisons pour lesquelles on entend
souvent dire que XSLT est mieux adapté pour l'écriture de
transformations de documents très structurés vers des documents moins
structurés que l'inverse.
----source----
<?xml version="1.0" encoding="UTF-8"?>
<html>
<p>Paragraphe 1.</p>
<li>Article de liste 1.1</li>
<li>Article de liste 1.2</li>
<p>Paragraphe 2.</p>
<li>Article de liste 2.1</li>
<p>Paragraphe 3.</p>
</html>
----xslt----
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<html>
<xsl:apply-templates select="/html/p"/>
</html>
</xsl:template>
<xsl:template match="p">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
<xsl:if test="name(following-sibling::*[1])='li'">
<liste>
<xsl:apply-templates select="following-sibling::*[1]" mode="pas"/>
</liste>
</xsl:if>
</xsl:template>
<xsl:template match="p" mode="pas"/>
<xsl:template match="li" mode="pas">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::*[1]" mode="pas"/>
</xsl:template>
</xsl:stylesheet>
----résultat----
<?xml version="1.0" encoding="UTF-16"?>
<html>
<p>Paragraphe 1.</p>
<liste>
<li>Article de liste 1.1</li>
<li>Article de liste 1.2</li>
</liste>
<p>Paragraphe 2.</p>
<liste>
<li>Article de liste 2.1</li>
</liste>
<p>Paragraphe 3.</p>
</html>
Cordialement,
Eric van der Vlist
--
------------------------------------------------------------------------
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
|