Bonjour,
J'aimerais transformer un document XML tel celui-ci :
<A att="z">
<B>
<D/>
<E att="y">
<H/>
<I/>
</E>
<F att="y"/>
</B>
<C att="x">
<G/>
</C>
</A>
en un document dans lequel les éléments possédant un attribut "att" sont
inclus dans des éléments globaux (fils directs de <root>) nommés <element>
et dont l'attribut "att" vaut la valeur de ce même attribut dans le
document source. La référence à un élément global se faisant via
l'utilisation d'un attribut "ref". Ajoutons que si, dans le document
source, deux éléments consécutifs ont la même valeur pour l'attribut "att"
(ex : <E> et <F>) alors ils doivent être inclus dans le même <element> global.
En clair, la transformation du document susmentionné donnerait un document
semblable à celui-ci :
<root>
<element att="z">
<A>
<B>
<D/>
<element ref="y"/>
</B>
<element ref="x"/>
</A>
</element>
<element att="y">
<E>
<H/>
<I/>
</E>
<F/>
</element>
<element att="x">
<C>
<G/>
</C>
</element>
</root>
La feuille de style suivante me donne des résultats satisfaisants mais ne
permet pas de rassembler les éléments <E> et <F> dans le même élément
global <element att="y"> :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<root>
<xsl:apply-templates mode="global_element"/>
</root>
</xsl:template>
<xsl:template match="*[@att]" mode="global_element">
<element>
<xsl:attribute name="att">
<xsl:value-of select="@att"/>
</xsl:attribute>
<xsl:copy>
<xsl:apply-templates mode="local_element"/>
</xsl:copy>
</element>
<xsl:apply-templates mode="global_element"/>
</xsl:template>
<xsl:template match="*[@att]" mode="local_element">
<element>
<xsl:attribute name="ref">
<xsl:value-of select="@att"/>
</xsl:attribute>
</element>
</xsl:template>
<xsl:template match="*" mode="local_element">
<xsl:copy>
<xsl:apply-templates mode="local_element"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Est-ce possible avec XSL ? Si oui, quelqu'un aurait-il une idée du code ou
des fonctions à utiliser ? Si non, quelles sont les autres possibilités ?
DOM ? SAX ?
Merci d'avance pour votre aide et bravo pour ce forum très enrichissant,
Fabrice
--
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 Tue Apr 22 11:47:05 2003