From: Benoit.Lefevre@reuters.com
Date: 06/05/2004 - 19:00
Bonjour.
Oui effectivement ceci est tout a fait faisable en XSLT.
Tout d'abord, si tu n'y connais absolument rien en XSLT en XPath
et/ou en namespaces XML, alors fait dans l'ordre les tutoriaux
suivants :
1) http://www.zvon.org/xxl/NamespaceTutorial/Output/index.html
2) http://www.zvon.org/xxl/XPathTutorial/General_fre/examples.html
3) http://www.zvon.org/xxl/XSLTutorial/Output_fre/example1_ch1.html
Attention, le dernier tutorial est relativement long.
Ensuite, je te propose ici une facon de resoudre ton probleme :
Dans un premier temps il faut definir une feuille de style contenant
le template identite :
--------------------------------
<xsl:template match="/ | @* | * | comment() | processing-instruction() | text()">
<xsl:copy>
<xsl:apply-templates select="@* | * | comment() | processing-instruction() | text()"/>
</xsl:copy>
</xsl:template>
--------------------------------
Ce template permet de recopier a l'identique en sortie le
document XML passe en entree.
Comme tu ne veux pas faire que recopier a l'identique tout
le document XML d'entree, il va falloir ajouter d'autre templates.
Or XSLT te permet de definir des templates partiellement ou
totalement "ambigus" les un par rapport aux autres.
Il y a ambiguite lorsque le processeur peut appliquer plusieurs
templates pour un seul noeud a processer.
Par nature, il est donc plus que probable que le template identite
soit ambigu avec n'importe quelles autres regles puisqu'il est est
appliquable sur n'importe quels noeuds quel que soient leurs types,
leurs emplacements dans l'arbre, leurs nom si il en ont ...
Pour resoudre ce type de probleme, la norme XSLT prend en
compte la possibilite d'affecter un niveau de priorite aux templates.
Si on ne leur en affecte pas, un ensemble de regles definies dans
la norme egalement permettent au processeur de leur en attribuer
un par defaut.
Celles-ci sont compliques, mais si tu as le courage :
http://www.w3.org/TR/xslt20/#dt-default-priority
La seul chose que j'ai retenu de ces regles c'est que le niveau
de priorite par defaut d'un template ne peut pas depasser 0.5.
En tirant profit de ce principe, tu peux alors definir en quelques sortes
des "exceptions" (a la regle) au template identite.
Dans le cas qui te concerne tu peux par exemple ajouter au template
identite le template suivant :
-------------------------------
<xsl:template match="champ 1" priority="1">
<xsl:attribute name="boolValue" select=" if( . = 'X' ) then 'true' else 'false' "/>
<xsl:copy>
<xsl:value-of select="$boolValue"/>
</xsl:copy>
</xsl:template>
-------------------------------
Notes au passage la presence du parametre priority dans la
definition du template. Ce dernier te permet ainsi de traiter le cas
des noeuds "champ 1".
Tu peux t'en inspirer pour imaginer celui permettant de traiter les
noeud de type "champ 2".
Si tu as besoin de fonctions de traitement de chaine de character
qui n'existe pas dans XSL, jette un oeil a EXSLT :
http://www.exslt.org/
Voila, j'espere t'avoir un peu mis sur la voie.
Cordialement
Benoit Lefevre.
--------------------------------------------------------------- -
Visit our Internet site at http://www.reuters.com
Get closer to the financial markets with Reuters Messaging - for more
information and to register, visit http://www.reuters.com/messaging
Any views expressed in this message are those of the individual
sender, except where the sender specifically states them to be
the views of Reuters Ltd.
--
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
|