Le 'hic' dont vous parlez est sans doute le fait que la balise <F>
n'apparaisse pas dans le document résultat ;o)
Même si ce défaut est facile à repérer, il est beaucoup moins évident à
expliciter !!! En effet, je ne comprends pas la cause exacte de ce
phénomène. Pourriez-vous m'éclairer sur ce sujet ?
Merci d'avance,
Fabrice
At 15:37 22/04/2003 +0200, you wrote:
>Bonjour,
>
> > -----Original Message-----
> > From: Fabrice Estiévenart [mailto:fe@cetic.be]
> > Sent: mardi 22 avril 2003 11:47
> > To: xml-tech@xmlfr.org
> > Subject: [xml-tech] Encore une énigme XSL...
> >
> > Bonjour,
> >
> > J'aimerais transformer un document XML tel celui-ci :
> > [...en] un document
> > semblable à celui-ci :
> > [...]
> > 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"> :
> > [...]
> > 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 ?
>
>Une bonne et une mauvaise nouvelle :
>* la bonne : il existe une classe de transformations "qui répond à votre
>question..." -- en utilisant une technique "bien connue" pour solutionner le
>cœur de ce type de problème; à savoir, les regroupements de nœuds en XSLT
>(ici, dans votre cas, sur la valeur de l'attribut "att") -- il s'agit de la
>méthode de Steve Muench (cf. "[muenchian method]")
>
>* la mauvaise : "qui y répond... ou presque", hélas (mais il s'en faut de
>peu : je vous laisse trouver le "hic" et y réfléchir -- car cela dépend
>peut-être d'une reformulation de votre besoin :)
>
>à vous de voir, bon courage pour la suite :
>
>-- data.xml
><?xml version="1.0" ?>
><A att="z">
> <B>
> <D/>
> <E att="y">
> <H/>
> <I/>
> </E>
> <F att="y"/>
> </B>
> <C att="x">
> <G/>
> </C>
></A>
>
>-- att-group.xsl
><?xml version="1.0" ?>
><xsl:transform
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
>
><xsl:key name="elements-by-att" match="//*" use="@att" />
>
><xsl:template match="/">
><root>
> <xsl:for-each select="//*[@att][count(. | key('elements-by-att', @att)[1])
>= 1]">
> <element att="{@att}">
> <xsl:copy>
> <xsl:apply-templates />
> </xsl:copy>
> </element>
> </xsl:for-each>
></root>
></xsl:template>
>
><xsl:template match="*">
><xsl:choose>
> <xsl:when test="@att">
> <element ref="{@att}" />
> </xsl:when>
> <xsl:otherwise>
> <xsl:copy>
> <xsl:apply-templates
> select="*[@att][count(. | key('elements-by-att', @att)[1]) != 1] |
>*[not(@att)]" />
> </xsl:copy>
> </xsl:otherwise>
></xsl:choose>
></xsl:template>
>
></xsl:transform>
>
>-- result.xml
><?xml version="1.0" ?>
><root>
> <element att="z">
> <A>
> <B>
> <D/>
> <element ref="y" />
> </B>
> <element ref="x" />
> </A>
> </element>
> <element att="y">
> <E>
> <H />
> <I />
> </E>
> </element>
> <element att="x">
> <C>
> <G />
> </C>
> </element>
></root>
>
> > Merci d'avance pour votre aide et bravo pour ce forum très enrichissant,
>
>(Merci pour la liste :)
>
> > Fabrice
>
>[muenchian method]
>* http://www.jenitennison.com/xslt/grouping/muenchian.html
>
>Cordialement,
>Cyril
>
>
>____________________________________________________________________________
>
>Ce message électronique et tous les fichiers attachés qu'il contient sont
>confidentiels et destinés exclusivement à l'usage de la personne à laquelle
>ils sont adressés. Si vous avez reçu ce message par erreur, merci de le
>retourner à son émetteur. La publication, l'usage, la distribution,
>l'impression ou la copie non autorisée de ce message et des attachements
>qu'il contient sont strictement interdits.
>
>This e-mail and any files transmitted with it are confidential and intended
>solely for the use of the individual to whom it is addressed. If you have
>received this email in error please send it back to the person that sent it
>to you. Unauthorized publication, use, dissemination, forwarding, printing
>or copying of this email and its associated attachments is strictly
>prohibited.
>
>____________________________________________________________________________
>
>
>
>
>--
>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)
--
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 Apr 23 09:39:47 2003