From: DSIT-EX (quyen.wei@sncf.fr)
Date: 26/09/2003 - 08:59
Hi :)
j'ai fait le test suivant, ca marche !!
<!--
Une des solutions possible
en jouant avec le mode pour initialiser
puis application des templates aux noeuds suivant
avec une regle bien particuliere pour les neuds val[@id='A'] qui
ne fait rien, et par consequent arrete l'application des templates aux
voisins
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<series>
<xsl:apply-templates select="//val[@id='A']"
mode="init"/>
</series>
</xsl:template>
<!-- pour initialiser la serie -->
<xsl:template match="val[@id='A']" mode="init">
<serie>
<xsl:copy-of select="."/>
<!-- application du template associe au premier
noeud suivant -->
<xsl:apply-templates select="following::*[1]"/>
</serie>
</xsl:template>
<!-- on definit le comportaement de val[@id='A'] -->
<xsl:template match="val[@id='A']"/>
<!-- pour le reste on se contente d'une simple copie et
d'application des templates pour le premier voisin -->
<xsl:template match="val">
<xsl:copy-of select="."/>
<!-- application du template associe au premier noeud
suivant -->
<xsl:apply-templates select="following::*[1]"/>
</xsl:template>
</xsl:stylesheet>
-----Message d'origine-----
De : LENTZ Marc [mailto:Marc.LENTZ@ctrceal.caisse-epargne.fr]
Envoyé : lundi 22 septembre 2003 15:38
À : 'xml-tech@xmlfr.org'
Objet : [xml-tech] Re: xml / xpath, et regroupement de noeuds simples
Je vais reformuler en plus simple
J'ai un XML comme celui-ci :
...
<val id="A"/> <!-- débute avec un A -->
<val id="C"/>
<val id="B"/>
<val id="D"/>
<val id="A"/> <!-- débute avec un A -->
<val id="D"/>
<val id="C"/>
<val id="A"/> <!-- débute avec un A -->
<val id="D"/>
<val id="B"/>
...
et j'aimerai, après une transformation XSL, obtenir :
<serie>
<val id="A"/> <!-- débute avec un A -->
<val id="C"/>
<val id="B"/>
<val id="D"/>
</serie>
<serie>
<val id="A"/> <!-- débute avec un A -->
<val id="D"/>
<val id="C"/>
</serie>
<serie>
<val id="A"/> <!-- débute avec un A -->
<val id="D"/>
<val id="B"/>
</serie>
en bref, j'aimerai simplement encadrer (dans une balise serie)
les séries, de lettres qui commencent par "A" ...
une idée ? une voie ?
-----Message d'origine-----
De : LENTZ Marc [mailto:Marc.LENTZ@ctrceal.caisse-epargne.fr]
Envoyé : lundi 22 septembre 2003 14:04
À : 'xml-tech@xmlfr.org'
Objet : [xml-tech] xml / xpath, et regroupement de noeuds simples
Bonjour,
Je pense être sur un cas d'école, mais ne trouve pas une solution simple ...
Ce pourquoi je fais appel à vous ...
Soit un XML comme suit :
...
<val id="A"/> <!-- débute avec un A -->
<val id="C"/>
<val id="B"/>
<val id="D"/>
<val id="A"/> <!-- débute avec un A -->
<val id="D"/>
<val id="C"/>
<val id="A"/> <!-- débute avec un A -->
<val id="D"/>
<val id="B"/>
...
Le xml est un ensemble de balises "val", identifié par un @id ...
la balise avec l'@id "A" est toujours présent, mais peut être suivi de
balises OPTIONNELLES avec un @id : "B" "C" ou "D" !
Je cherche à créer des groupes (mettre une hiérarchie) comme ceci :
...
<groupe>
<v1>A</v1>
<v2>B</v2>
<v3>C</v3>
<v4>D</v4>
</groupe>
<groupe>
<v1>A</v1>
<v2></v2> <!-- OK : il n'y avait pas de "B" dans ce
groupe -->
<v3>C</v3>
<v4>D</v4>
</groupe>
<groupe>
<v1>A</v1>
<v2>B</v2>
<v3></v3> <!-- OK : il n'y avait pas de "C" dans ce
groupe -->
<v4>D</v4>
</groupe>
...
J'ai cherché à faire ça, avec le XSL suivant :
<xsl:for-each select="val[@id='A']">
<groupe>
<v1><xsl:value-of select="."/></v1>
<v2><xsl:value-of select="following-sibling::val[@id='B']"/></v2>
<v3><xsl:value-of select="following-sibling::val[@id='C']"/></v3>
<v4><xsl:value-of select="following-sibling::val[@id='D']"/></v4>
</groupe>
</xsl:for-each>
le hic, c'est que je vais toujours obtenir celà :
...
<groupe>
<v1>A</v1>
<v2>B</v2>
<v3>C</v3>
<v4>D</v4>
</groupe>
<groupe>
<v1>A</v1>
<v2>B</v2> <!-- Et POURTANT : il n'y avait pas de "B"
dans ce groupe !!! -->
<v3>C</v3>
<v4>D</v4>
</groupe>
<groupe>
<v1>A</v1>
<v2>B</v2>
<v3>C</v3> <!-- Et POURTANT : il n'y avait pas de "C"
dans ce groupe !!! -->
<v4>D</v4>
</groupe>
...
car effectivement ...
le following-sibling va toujours trouver un "frère" avec l'@id qui va bien
...
bien que ce dernier ne soit pas dans le même groupe (compris entre 2 "A"
distincts)
alors, existe t il un moyen simple de régler ce problème ... ?
(en espèrant m'être fait compris)
--
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)
--
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:06 UTC
webmaster@xmlfr.org
|