que diriez-vous:
var xml:XML = <doc><{nodeName}>{nodeValue}</{nodeName}></doc>
trace(xml.toXMLString());
sorties:
<doc>
<tag><non-escaped-content></tag>
</doc>
je l'avoue, ce n'est pas CDATA
, mais je ne vois pas de problème ... l'analyse syntaxique nécessite un peu plus de temps, mais OTOH, l'échappement correct beaucoup plus robuste que CDATA
...
la version avec XMLNode
utilise le paquet flash.xml
, qui est pour rétrocompatibilité avec AS2 ... n'a même pas remarqué, il avait disparu sous FP10 ... Cependant, vous pouvez utiliser cette
var x:XML = new XML("<![CDATA[" + nodeValue + "]]>");
en remplacement, puis utiliser appendChild
comme vous le feriez avec flash.xml .. .
Sinon, vous pouvez utiliser le style e4x, si vous l'envelopper dans une fonction
function cdata(data:String):XML {
return = new XML("<![CDATA[" + data + "]]>");
}
puis
var xml:XML = <doc><{nodeName}>{cdata(nodeValue)}</{nodeName}></doc>
mais personnellement, je pense que les chaînes, qui sont à la fois mode texte et relativement court, devraient être échappés, plutôt enveloppé dans CDATA
...
mise à jour: Je ne comprends pas votre point ici
"<"
is very different than a "<"
qui est ce que la chose est sur ...: D ... "<"
serait interprété lors de l'analyse syntaxique, alors que "<"
est juste r converti en "<"
, donc après avoir analysé le XML, vous aurez exactement la même chaîne que précédemment ...
ceci est mon code:
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main():void {
var nodeName:String = "tag";
var nodeValue:String = "<non-escaped-content>";
var xml:XML = <doc><{nodeName}>{cdata(nodeValue)}</{nodeName}></doc>;
trace(cdata("test").toXMLString());
trace(xml.toXMLString());
}
private function cdata(data:String):XML {
return new XML("<![CDATA[" + data + "]]>");
}
}
}
fonctionne parfaitement pour moi sur flash player 10, compilé avec sdk flex 4 ... ne disposent pas d'un IDE flash à portée de main, mais quand il s'agit de pur ActionScript les résultats sont presque certainement les mêmes, donc cela devrait fonctionner (vous pouvez l'utiliser comme votre classe de document, si vous voulez, ou simplement l'instancier) ...
btw. la première trace montre que le second exemple fonctionne, ce qui est tout à fait évident, puisque new XML(<String>)
utilise l'analyseur XML
natif pour créer une XML
de la chaîne donnée ...
ici est ce que le ci-dessus génère:
<![CDATA[test]]>
<doc>
<tag><![CDATA[<non-escaped-content>]]></tag>
</doc>
fonctionne très bien pour moi ... :)
greetz
retour 2dos
réponse mise à jour ... greetz – back2dos