Re: Traitement selon sous-balise
"David DAZ. Duriez" <[email protected]> Thu, 26 Jun 2008 11:43:35 +0200
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <[email protected]> |
Merci Eric pour ton aide, ta solution fonctionne, mais seulement dans ce =
cas
:
<_06_auteur apagenum=3D"1" pagenum=3D"1">
<Emph cstyle=3D"06_auteur_c">Fran=C3=A7oise</Emph>
<Emph cstyle=3D"07_biographie"> R=C3=A9dactrice </Emph> </_06_aute=
ur>
Comment je pourrais adapter pour que =E7a fonctionne =E9galement si j'ai =
le cas
ci-dessous (pas de sous balise), et afficher : <auteur>Fran=E7oise</auteu=
r> ?
<_06_auteur apagenum=3D"1" pagenum=3D"1">Fran=E7oise</_06_auteur>
Merci d'avance
-----Message d'origine-----
De=A0: [email protected] [mailto:[email protected]] De la=
part
de Eric van der Vlist
Envoy=E9=A0: mercredi 25 juin 2008 18:56
=C0=A0: [email protected]
Objet=A0: [xml-tech] Re: Traitement selon sous-balise
Bonjour,
Le mercredi 25 juin 2008 =C3=A0 17:47 +0200, David DAZ. Duriez a =C3=A9cr=
it :
> Bonjour,
> =20
>=20
> J'ai un xml, avec la partie suivante :=20
>=20
> <_06_auteur apagenum=3D"1" pagenum=3D"1">
>=20
> <Emph cstyle=3D"06_auteur_c">Fran=C3=A7oise</Emph>
>=20
> <Emph cstyle=3D"07_biographie"> R=C3=A9dactrice </Emph>
>=20
> </_06_auteur>
>=20
> =20
>=20
> Je voudrai arriv=C3=A9 =C3=A0 ceci :
>=20
> <auteur>Fran=C3=A7oise</auteur>
>=20
> <biographie>r=C3=A9dactrice</biographie>
>=20
> =20
>=20
> Pour le moment le code xsl est :
>=20
> <xsl:when
>
test=3D"contains(translate(name(current()),$translate-from,$translate-to)=
,'aute
> ur')">
>=20
> <xsl:call-template name=3D"auteur"/>
>=20
> </xsl:when>
>=20
> =20
>=20
>=20
>=20
> <xsl:template name=3D"auteur" match=3D"//Emph[contains(@cstyle,'auteur'=
)]">
>=20
>=20
> <xsl:choose>
>=20
> =20
>=20
> <xsl:when test=3D"Emph[contains(@cstyle,'auteur')]">
>=20
> <auteur>
>=20
> <xsl:apply-templates />
>=20
> </auteur>
>=20
> </xsl:when>
>=20
> =20
>=20
> <xsl:when test=3D"Emph[contains(@cstyle,'biographie')]">
>=20
> <biographie>
>=20
> <xsl:apply-templates />
>=20
> </biographie>
>=20
> </xsl:when>
>=20
> =20
>=20
> <xsl:otherwise>
>=20
> <auteur_si_pas_sousbalise>
>=20
> <xsl:value-of select=3D"."/>
>=20
> </auteur_si_pas_sousbalise>
>=20
> </xsl:otherwise>
>=20
> =20
>=20
> </xsl:choose>
>=20
> </xsl:template>
>=20
> =20
>=20
>=20
>=20
> Et j'obtient le r=C3=A9sultat suivant :
>=20
> <auteur>
>=20
> <auteur_si_pas_sousbalise>Fran=C3=A7oise</auteur_si_pas_sousbalise>
>=20
> R=C3=A9dactrice
>=20
> </auteur>
>=20
> =20
>=20
> Quelqu'un pourrait-il m'aider ?, sa fait une journ=C3=A9e que je cherch=
e...
Lorsque votre transformation arrive sur l'=C3=A9l=C3=A9ment =EF=BB=BF<_06=
_auteur/>, la
condition de votre =EF=BB=BF<xsl:when
test=3D"contains(translate(name(current()),$translate-from,
$translate-to),'auteur')"> est v=C3=A9rifi=C3=A9e et vous appelez le
template =EF=BB=BF<xsl:template name=3D"auteur"
match=3D"//Emph[contains(@cstyle,'auteur')]">.
La premi=C3=A8re condition rencontr=C3=A9 dans le xsl:choose est v=C3=A9r=
ifi=C3=A9e, vous
g=C3=A9n=C3=A9rez un =C3=A9l=C3=A9ment =EF=BB=BF<auteur> et vous ex=C3=A9=
cutez les templates sur les
sous
=C3=A9l=C3=A9ments de =EF=BB=BF =EF=BB=BF<_06_auteur/>.
Parmi ces sous =C3=A9l=C3=A9ments, l'=C3=A9l=C3=A9ment =EF=BB=BF<Emph
cstyle=3D"06_auteur_c">Fran=C3=A7oise</Emph> v=C3=A9rifie la condition du
template =EF=BB=BF<xsl:template name=3D"auteur"
match=3D"//Emph[contains(@cstyle,'auteur')]"> qui est donc ex=C3=A9cut=C3=
=A9 une
deuxi=C3=A8me fois avec un noeud contexte qui est maintenant =EF=BB=BF=EF=
=BB=BF<Emph
cstyle=3D"06_auteur_c">Fran=C3=A7oise</Emph> et cette fois ci, aucune des
conditions du xsl:choose n'est v=C3=A9rifi=C3=A9e et vous g=C3=A9n=C3=A9r=
ez
donc =EF=BB=BF<auteur_si_pas_sousbalise>Fran=C3=A7oise</auteur_si_pas_sou=
sbalise>.
La transformation arrive ensuite sur l'=C3=A9l=C3=A9ment =EF=BB=BF<Emph
cstyle=3D"07_biographie"> R=C3=A9dactrice </Emph> et, ne trouvant pas de
template pour cet =C3=A9l=C3=A9ment, elle applique le template par d=C3=A9=
faut qui
affiche la valeur de l'=C3=A9l=C3=A9ment (=EF=BB=BFR=C3=A9dactrice).=20
Il vous faut dissocier les traitements (et tests) faits au moment de
l'appel de ce template via call-template et de celui faits au moment de
son ex=C3=A9cution via apply-templates.
Pour simplifier le tout, vous pourriez =C3=A9crire quelque chose du type =
:
=EF=BB=BF <xsl:when
test=3D"contains(translate(name(current()),$translate-from,$translate-to)=
,'aute
ur')">
<xsl:apply-templates/>
</xsl:when>
=20
=20
<xsl:template match=3D"Emph[contains(@cstyle,'auteur')]">
<auteur>
<xsl:apply-templates />
</auteur>
</xsl:template>
=EF=BB=BF<xsl:template match=3D"Emph[contains(@cstyle,'biographie')]">
<biographie>
<xsl:apply-templates />
</biographie>
</xsl:template>
=EF=BB=BF<xsl:template match=3D"Emph">
<auteur_si_pas_sousbalise>
<xsl:value-of select=3D"."/>
</auteur_si_pas_sousbalise>
</xsl:template>
Cordialement,
Eric van der Vlist
> =20
>=20
> Merci d'avance.
>=20
--=20
GPG-PGP: 2A528005
Have you ever thought about unit testing XSLT templates?
http://xsltunit.org
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
(ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
-- Attached file included as plaintext by Ecartis --
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQBIYniqDvn+ZCpSgAURArGnAKChgiFgg51t6d+XhXrBs872WEQjxACfeBwV
9YWFJp2vR/jE0EbxhwPkWjQ=3D
=3D9I3B
-----END PGP SIGNATURE-----
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "[email protected]" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de=20
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant=20
la commande "unsubscribe" a [email protected]
(mailto:[email protected]?Subject=3Dunsubscribe)
No virus found in this incoming message.
Checked by AVG.=20
Version: 7.5.524 / Virus Database: 270.4.1/1519 - Release Date: 25/06/200=
8
16:13
=20
No virus found in this outgoing message.
Checked by AVG.=20
Version: 7.5.524 / Virus Database: 270.4.1/1519 - Release Date: 25/06/200=
8
16:13
=20
-- Binary/unsupported file stripped by Ecartis --
-- Type: application/ms-tnef