这个怎么样:
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 + "]]>");
作为替代,然后像使用 flash.xml 一样使用 appendChild ...
或者你可以使用 e4x 风格,如果你将它包装在一个函数中
function cdata(data:String):XML {
return = new XML("<![CDATA[" + data + "]]>");
}
然后
var xml:XML = <doc><{nodeName}>{cdata(nodeValue)}</{nodeName}></doc>
但就我个人而言,我认为基于文本且相对较短的字符串应该被转义,而不是包裹在CDATA ...
更新:
我不明白你的意思
"&lt;" 与 "<" 非常不同
这就是全部内容 ... :D ... "<" 将在解析期间被解释,而 "&lt;" 只是重新转换为 "<",所以在解析之后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 + "]]>");
}
}
}
在使用 flex sdk 4 编译的 flash player 10 上非常适合我……手头没有 flash IDE,但是对于纯 ActionScript 结果几乎肯定是相同的,所以它应该可以工作(你如果您愿意,可以将其用作您的文档类,或者只是实例化它)...
顺便说一句。第一个跟踪显示,第二个示例有效,这也很明显,因为 new XML(<String>) 使用本机 XML 解析器从给定字符串创建 XML ...
这是上面生成的:
<![CDATA[test]]>
<doc>
<tag><![CDATA[<non-escaped-content>]]></tag>
</doc>
对我来说效果很好...... :)
问候
back2dos