Bonjour à tous,
J'ai un stylesheet qui faire fusionner les éléments au même nom et avec les même valeurs d'attributs. Le xslt marche bien en saxon, mais ne marche pas en xalan qu'en donnant "<test/>" en sortie. J'aimerais le faire fonctionner sous xalan. Merci d'avance pour tous vos conseilles.

xml source:
<test>
<A x="0">
<B>1</B>
</A>
<A x="0">
<C>2</C>
</A>
<A x="0">
<D x="0">
<E>3</E>
</D>
</A>
<A x="0">
<D x="0">
<E>3</E>
</D>
</A>
<A x="0">
<D x="1">
<E>5</E>
</D>
</A>
<A x="1">
<B>4</B>
</A>
</test>

xml en sortie que je veux (obtenu sous saxon, mais pas sous xalan1.x):
<test>
<A x="0">
<B>1</B>
<C>2</C>
<D x="0">
<E>3</E>
</D>
<D x="1">
<E>5</E>
</D>
</A>
<A x="1">
<B>4</B>
</A>
</test>

Le stylesheet xslt utilisé:

<xsl:stylesheet xmlnssl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">

<xsl:output method="xml" indent="yes"/>

<xsl:strip-space elements="*"/>
<xsl:key name="element" match="*" use="concat(local-name(),@*)"/>

<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:variable name="set">
<xsl:copy-of select="key('element',concat(local-name(),@*))/*"/>
</xsl:variable>
<xsl:apply-templates select="text()"/>
<xsl:apply-templates
select="exsl:node-set($set)/*[generate-id()=generate-id(key('element',concat(local-name(),@*)))]"/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>
Bonjour!

Je ne comprends pas ta question, en particulier la phrase "ne marche pas en xalan qu'en donnant "<test/>" en sortie"... Peux-tu nous montrer le code produit?

De plus, pourrais-tu mettre en page le code source que tu donnes dans ton message afin qu'il soit plus facilement lisible?

Merci!
Modifié par Gilles (07 Apr 2009 - 10:30)