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"<elt2 att=3D"xxx"/>"/> 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><</xsl:text> <xsl:value-of select=3D"name()"/> <xsl:apply-templates select=3D"@*" mode=3D"serialize-xml"/> <xsl:text>></xsl:text> <xsl:apply-templates select=3D"node()" mode=3D"serialize-xml"/> <!-- balise fermante --> <xsl:text></</xsl:text> <xsl:value-of select=3D"name()"/> <xsl:text>></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