From: LENTZ Marc (Marc.LENTZ@ctrceal.caisse-epargne.fr)
Date: 22/09/2003 - 12:04
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)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|