jak o tym:
var xml:XML = <doc><{nodeName}>{nodeValue}</{nodeName}></doc>
trace(xml.toXMLString());
wyjść:
<doc>
<tag><non-escaped-content></tag>
</doc>
Przyznaję, nie jest to CDATA
, ale nie widzę problemu ... parsowanie wymaga trochę więcej czasu, ale OTOH, poprawne wydostanie się znacznie bardziej niezawodne niż CDATA
...
wersja z XMLNode
używa pakietu flash.xml
, który jest dla wsteczną kompatybilność z AS2 ... nawet nie zauważy, że zniknął pod FP10 ... jednak, można użyć tego
var x:XML = new XML("<![CDATA[" + nodeValue + "]]>");
jako zamiennik a następnie użyć appendChild
jak przy flash.xml .. .
alternatywnie można użyć go e4x styl, jeśli zawinąć go w funkcji
function cdata(data:String):XML {
return = new XML("<![CDATA[" + data + "]]>");
}
a następnie
var xml:XML = <doc><{nodeName}>{cdata(nodeValue)}</{nodeName}></doc>
ale osobiście uważam, że ciągi znaków, które są zarówno tekstowych i stosunkowo krótki, należy uciec, a następnie zawijane w CDATA
...
zmiana: ja nie rozumiem twój punkt widzenia tutaj
"<"
is very different than a "<"
to właśnie cała rzecz jest o ...: D ... "<"
byłyby interpretowane podczas parsowania, natomiast "<"
tylko r econverted do "<"
, więc po analizie XML, będziesz mieć dokładnie taki sam ciąg jak wcześniej ...
to mój kod:
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 + "]]>");
}
}
}
działa idealnie dla mnie na flash player 10, sporządzoną z Flex SDK 4 ... nie masz pod ręką lampy błyskowej IDE, ale jeśli chodzi o czystej ActionScript wyniki są prawie na pewno takie same, więc powinno działać (możesz użyć tego jako klasy dokumentu, jeśli chcesz, lub po prostu utworzyć instancję) ...
btw. Pierwszy ślad wskazuje, że drugi przykład działa, co jest dość oczywiste, ponieważ new XML(<String>)
wykorzystuje natywne XML
parser do stworzenia XML
z danym ciągiem ...
tutaj jest to, co powyżej generuje:
<![CDATA[test]]>
<doc>
<tag><![CDATA[<non-escaped-content>]]></tag>
</doc>
działa całkiem dobre dla mnie ... :)
Greetz
powrotem 2dos
odpowiedź zaktualizowana ... greetz – back2dos