这个怎么样:
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
......
更新:
我不明白你的意思
"<"
与一个非常不同"<"
这就是整个事情的意义... :D ..."<"
将在解析期间被解释,而"<"
只是重新转换为"<"
,因此在解析 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