¿qué tal esto:
var xml:XML = <doc><{nodeName}>{nodeValue}</{nodeName}></doc>
trace(xml.toXMLString());
salidas:
<doc>
<tag><non-escaped-content></tag>
</doc>
admito, esto no es CDATA
, pero yo no veo un problema ... el análisis requiere un poco más de tiempo, pero OTOH, escape correcto mucho más robusto que CDATA
...
la versión con XMLNode
usa el paquete flash.xml
, que es para compatibilidad hacia atrás con AS2 ... ni se dio cuenta, ya no estaba bajo FP10 ... sin embargo, usted podría utilizar este
var x:XML = new XML("<![CDATA[" + nodeValue + "]]>");
como un reemplazo y luego usar appendChild
como lo haría con flash.xml .. .
otra posibilidad es utilizar el estilo que e4x, si lo envuelve en una función
function cdata(data:String):XML {
return = new XML("<![CDATA[" + data + "]]>");
}
y luego
var xml:XML = <doc><{nodeName}>{cdata(nodeValue)}</{nodeName}></doc>
pero personalmente, creo que las cadenas, que son texto basado y relativamente corto, deben ser escapados, en lugar envuelto en CDATA
...
actualización: no consigo su punto aquí
"<"
is very different than a "<"
eso es lo que todo el asunto se trata de ...: D ... "<"
sería interpretado durante el análisis, mientras que "<"
es sólo r econverted a "<"
, entonces después de analizar el XML, tendrá exactamente la misma cadena que antes ...
este es mi código:
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 + "]]>");
}
}
}
funciona perfectamente para mí en el reproductor de flash de 10, compilado con SDK de Flex 4 ... no tienen un flash IDE a la mano, pero cuando se trata de pura ActionScript los resultados son casi definitivamente los mismos, por lo que debería funcionar (puede usar eso como su clase de documento, si lo desea, o simplemente crear una instancia) ...
btw. la primera traza muestra, que el segundo ejemplo funciona, que también es bastante obvio, ya que new XML(<String>)
utiliza el analizador XML
nativa para crear un XML
de la cadena dada ...
aquí es lo que lo anterior genera:
<![CDATA[test]]>
<doc>
<tag><![CDATA[<non-escaped-content>]]></tag>
</doc>
funciona bastante bien para mí ... :)
Greetz
vuelta 2dos
respuesta actualizada ... greetz – back2dos