как об этом:
var xml:XML = <doc><{nodeName}>{nodeValue}</{nodeName}></doc>
trace(xml.toXMLString());
выходов:
<doc>
<tag><non-escaped-content></tag>
</doc>
я признаю, что это не CDATA
, но я не вижу проблемы ... синтаксический требует немного больше времени, но OTOH, правильный выход намного более прочный, чем CDATA
...
версия с XMLNode
использует пакет flash.xml
, который предназначен для Обратная совместимость с AS2 ... даже не заметил, она исчезла под FP10 ... однако, вы могли бы использовать этот
var x:XML = new XML("<![CDATA[" + nodeValue + "]]>");
в качестве замены, а затем использовать appendChild
как вы бы с flash.xml .. .
в качестве альтернативы вы можете использовать его e4x стиль, если вы обернуть его в функции
function cdata(data:String):XML {
return = new XML("<![CDATA[" + data + "]]>");
}
, а затем
var xml:XML = <doc><{nodeName}>{cdata(nodeValue)}</{nodeName}></doc>
но лично я думаю, что строки, которые являются как текстовые и относительно короткие, должны быть экранированы, а затем заворачивают в CDATA
...
обновление: я не получить свою точку зрения здесь
"<"
is very different than a "<"
это то, что все это о ...: D ... "<"
будет интерпретироваться во время синтаксического анализа, в то время как "<"
только г econverted до "<"
, поэтому после разбора XML у вас будет точно той же строки, что и раньше ...
это мой код:
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 + "]]>");
}
}
}
работает отлично для меня на флэш-плеер 10, скомпилированные с Flex SDK 4 ... не имеют флэш-IDE под рукой, но когда дело доходит до чистого ActionScript результаты почти наверняка одинаковы, поэтому он должен работать (вы можете использовать это как свой класс документов, если хотите, или просто создать его экземпляр).
кстати. первый след показывает, что второй пример работы, что также вполне очевидно, так как new XML(<String>)
использует родной XML
анализатора для создания XML
из заданной строки ...
вот что Вышеприведенное:
<![CDATA[test]]>
<doc>
<tag><![CDATA[<non-escaped-content>]]></tag>
</doc>
работает довольно хорошо для меня ... :)
Greetz
назад 2dos
ответить обновлено ... greetz – back2dos