OVH Cloud OVH Cloud

Echapper du XML

7 réponses
Avatar
Isammoc
Existe t il avec dom une fonction qui échappe les caractères spéciaux afin
d'inclure un texte dans un noeud XML sans forcément faire tomber la DTD?

--
Isammoc

7 réponses

Avatar
Cimballi
Salut,

Eh bien si tu utilises une API XML digne de ce nom, tu ne devrais pas avoir de
problème (ex : Xerces de Jakarta) !

Cimballi



Isammoc wrote:
Existe t il avec dom une fonction qui échappe les caractères spéciaux afin
d'inclure un texte dans un noeud XML sans forcément faire tomber la DTD?



Avatar
Kupee
Isammoc wrote:
Existe t il avec dom une fonction qui échappe les caractères spéciaux afin
d'inclure un texte dans un noeud XML sans forcément faire tomber la DTD?


Si c'est en java, tu fais comme Cimballi t'as dit, si c'est
en rédigeant le xml, tu fais ca
<tata><![CDATA[<montructout chelou>/<<>]]></tata>
En espérant que c'était ca que tu cherchais

Avatar
steph

Isammoc wrote:

Existe t il avec dom une fonction qui échappe les caractères spéciaux
afin d'inclure un texte dans un noeud XML sans forcément faire tomber
la DTD?



Si c'est en java, tu fais comme Cimballi t'as dit, si c'est
en rédigeant le xml, tu fais ca
<tata><![CDATA[<montructout chelou>/<<>]]></tata>
En espérant que c'était ca que tu cherchais


qu'est ce qu'il se passe quand il y a "]]>" dans les données que l'on place
entre "<![CDATA[" et "]]>" ?

--
stephane
retirez les lettres majuscules et le 666 de l'adresse pour l'utiliser.


Avatar
Isammoc
Isammoc <Isammoc(no-spam)@wanadoo.fr> écrivait
news::

Existe t il avec dom une fonction qui échappe les caractères spéciaux
afin d'inclure un texte dans un noeud XML sans forcément faire tomber
la DTD?



C'est bon, j'ai trouvé...

<code>
String avant = "ma chaine à refaire...";
String apres = avant.replaceAll("&", "&amp;").replaceAll("<",
"&lt;").replaceAll(
">", "&gt;").replaceAll(""", "&quot;").replaceAll("'", "&#
39;");

</code>


(oui, parce que pour l'écrire, je ne passe pas par dom...)

--
Isammoc

Avatar
Thomas Nguyen
On Wed, 03 Nov 2004 15:25:51 +0100, steph wrote:
qu'est ce qu'il se passe quand il y a "]]>" dans les données que l'on place
entre "<![CDATA[" et "]]>" ?


Ca ferme la section CDATA, et ça traite le reste comme du XML "normal".
(Avec probablement une erreur de syntaxe quand le parser arrive sur le
deuxième "]]>" )

Essaie, tu verra tout de suite ce que ça donne.

Avatar
steph

Isammoc <Isammoc(no-spam)@wanadoo.fr> écrivait
news::


Existe t il avec dom une fonction qui échappe les caractères spéciaux
afin d'inclure un texte dans un noeud XML sans forcément faire tomber
la DTD?




C'est bon, j'ai trouvé...

<code>
String avant = "ma chaine à refaire...";
String apres = avant.replaceAll("&", "&amp;").replaceAll("<",
"&lt;").replaceAll(
">", "&gt;").replaceAll(""", "&quot;").replaceAll("'", "&#
39;");

</code>


berk. avec ça tu vas exploser les perfs aussi bien en vitesse d'exécussion qu'en
occupation mémoire à cause des créations de String et des compilation de regexp.

j'essayerai plus un truc commme ça, même si ça peut s'optimiser au cas par cas:

public static final String escape(final String in)
{
final char[] chars = in.toCharArray();
final StringBuffer out=new StringBuffer(chars.length);
for (int i=0; i<chars.length; i++)
{
char d = chars[i];
switch (d)
{
case '<':
out.append("&lt;");
break;
case '>':
out.append("&gt;");
break;
default:
out.append(d);
break;
}
}
return out.toString();
}

sinon, si c'est pour sérialiser des beans, la librairie tagsoup fait des trucs
sympas.



(oui, parce que pour l'écrire, je ne passe pas par dom...)



--
stephane
retirez les lettres majuscules et le 666 de l'adresse pour l'utiliser.


Avatar
Isammoc
sinon, si c'est pour sérialiser des beans, la librairie tagsoup fait
des trucs sympas.



(oui, parce que pour l'écrire, je ne passe pas par dom...)



Pour ce projet, je n'ai pas besoin de performance... C'est une histoire à
la con, j'avoue ne meme pas avoir fait d'analyse, c'est pour dire à quel
point ce projet est important ;-P

--
Isammoc