Re: Problème de copy-of

Stephane Bonhomme <[email protected]> Fri, 08 Aug 2008 09:54:28 +0200
Newsgroups gmane.text.xml.french.tech
Organization Exselt Services
Message-ID <1218182068.4299.14.camel@citrouille>
Bonjour

Premi=C3=A8re chose : vous ne pouvez pas mettre un fragment d'arbre xml
litt=C3=A9ralement dans un attribut, sous peine de voir votre xml resulta=
nt
mal forme, pour illustrer :

<ELT ATT=3D"<elt2 att=3D"xxx"/>"/> n'est pas bien form=C3=A9, il sera don=
c
n=C3=A9c=C3=A9ssaire d'encoder en entit=C3=A9s certains caract=C3=A8res c=
ontenus dans
l'attribut :

<ELT ATT=3D"&lt;elt2 att=3D&quot;xxx&quot;/&gt;"/> et vous obtenez un xml
bien form=C3=A9, le parser xml de votre application cible se chargera (en
principe) de r=C3=A9soudre les entit=C3=A9s lors de l'analyse syntaxique =
et vous
pourrez, par exemple avec dom, obtenir facilement l'expression mathML
inclue.

Maintenant pour obtenir ce r=C3=A9sultat en xslt, il vous faut =C3=A9crir=
e un jeu
de templates particuliers pour la s=C3=A9rialisation de votre arbre, la
conversion en chaine "standard" ne retenant que les noeuds texte :

Vous appellerez allors ces templates de la fa=C3=A7on suivante :
 <xsl:variable name=3D"string">
   <xsl:apply-templates mode=3D"serialize-xml"
select=3D"document($path)/math:math/*"/>
</xsl:variable>

Voici les templates :

<xsl:template match=3D"*" mode=3D"serialize-xml">
 <!-- balise ouvrante -->
  <xsl:text>&lt;</xsl:text>
  <xsl:value-of select=3D"name()"/>
  <xsl:apply-templates select=3D"@*" mode=3D"serialize-xml"/>
  <xsl:text>&gt;</xsl:text>

  <xsl:apply-templates select=3D"node()" mode=3D"serialize-xml"/>

 <!-- balise fermante -->
  <xsl:text>&lt;/</xsl:text>
  <xsl:value-of select=3D"name()"/>
  <xsl:text>&gt;</xsl:text>
</xsl:template>

<xsl:template match=3D"@*" mode=3D"serialize-xml">
  <xsl:text> </xsl:text>
  <xsl:value-of select=3D"name()"/>
  <xsl:text>=3D"</xsl:text>
  <xsl:value-of select=3D"."/>
  <xsl:text>"</xsl:text>
</xsl:template>


C'est assez simple comme approche, je ne traite pas ici les
commentaires, PI, ni quelques cas particuliers (pr=C3=A9sence de " dans l=
es
valeurs d'attributs...). Mais c'est un d=C3=A9but qui devrait vous aiguil=
ler
sur la bonne voie.

Cordialement,
St=C3=A9phane.

Le vendredi 08 ao=C3=BBt 2008 =C3=A0 09:01 +0200, jerome steunou a =C3=A9=
crit :
> Dsol j'en rajoute mais : pour faire simple, je pensais que copy-of me
> permettrait de passer d'un arbre  une string trs simplement, ce qui est=
 ce
> dont j'ai besoin ici.
> Le 8 aot 2008 08:59, jerome steunou <[email protected]> a crit :
>=20
> > lignon >Oui node() j'ai dj essay mme rsultat.
> >
> > Stephane Bonhomme > Je comprend bien votre explication, donc les
> > <xsl:message terminate=3D"non"><xsl:value-of select=3D"$string" /></x=
sl:message>
> > que j'utilise pour observer le rsultat en console font la mme chose ?=
 Il
> > passe un tree en string en ne prenant que les node texte ?
> >
> > Sinon oui a semble bizarre  premire vue, et compltement hors norme ma=
is
> > j'ai hlas besoin d'avoir ces formules mathmatiques sous forme de math=
ml
> > telles qu'elles sont prsentes dans le document d'origine, dans l'attr=
ibut
> > de cette balise. Je ne peux pas trop m'tendre sur le sujet, considrez
> > juste que c'est une infime partie d'un logiciel.
> >
> > Cordialement,
> >
> > Jrme Steunou
> >
>=20
>=20
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>=20
> Liste de diffusion "[email protected]" (http://xmlfr.org).
>=20
> Cette liste est a votre disposition pour discuter en francais de=20
> tout sujet technique lie a XML.
>=20
> Pour resilier votre abonnement, envoyez un message contenant=20
> la commande "unsubscribe" a [email protected]
> (mailto:[email protected]?Subject=3Dunsubscribe)
>=20
--=20
           St=C3=A9phane Bonhomme           --           Exselt Services
       =20
        Formations, Conseil et R=C3=A9alisations en Ing=C3=A9nierie Docum=
entaire,
                    Technologies Web et Logiciels Libres=20
             [email protected]   -   http://www.exselt.com
                04 57 39 30 78        /      06 88 57 27 08