当前位置:  开发笔记 > 编程语言 > 正文

E4X添加CDATA内容

如何解决《E4X添加CDATA内容》经验,为你挑选了2个好方法。

基本上我需要使用变量定义节点名称及其CDATA内容.

var nodeName:String = "tag";
var nodeValue:String = "";

天真我以为这会起作用:

var xml:XML = <{nodeName}>

产出:


在为FP9设计的以前版本的脚本中,我使用以下方法绕过了问题:

new XMLNode( XMLNodeType.XMLNodeType.CDATA_NODE, nodeValue ); // ...

但这似乎在FP10中不起作用,我觉得这种方法无论如何都会以某种方式折旧.

谁有优雅的解决方案呢?



1> back2dos..:

这个怎么样:

var xml:XML = <{nodeName}>{nodeValue}
trace(xml.toXMLString());

输出:


  <non-escaped-content>

我承认,这不是CDATA,但我没有看到问题...解析需要更多的时间,但OTOH,正确的逃避比CDATA... 更强大

XMLNode使用该flash.xml软件包的版本,这是为了向后兼容AS2 ...甚至没有注意到,它在FP10下消失...但是,你可以使用这个

var x:XML = new XML("");

作为替代品,然后appendChild像使用flash.xml一样使用...

或者你可以使用它e4x风格,如果你把它包装在一个函数中

function cdata(data:String):XML {
    return = new XML("");
}

然后

var xml:XML = <{nodeName}>{cdata(nodeValue)}

但就个人而言,我认为那些基于文本和相对较短的字符串应该被转义,而不是包含在CDATA...


更新: 我不明白你的观点

"<" 与a非常不同 "<"

这就是整个事情的意义 ......:D ... "<"将在解析过程中被解释,而"<"刚刚被重新转换为"<",所以在解析XML之后,你将拥有与之前完全相同的字符串......

这是我的代码:

package {
    import flash.display.MovieClip;
    public class Main extends MovieClip {       
        public function Main():void {
            var nodeName:String = "tag";
            var nodeValue:String = "";
            var xml:XML = <{nodeName}>{cdata(nodeValue)};
            trace(cdata("test").toXMLString());
            trace(xml.toXMLString());
        }
        private function cdata(data:String):XML {
            return new XML("");
        }
    }
}

在flash player 10上完美适用于我,使用flex sdk编译4 ...手头没有flash IDE,但是当谈到纯ActionScript结果时几乎肯定是一样的,所以它应该可以工作(你可以使用它)作为你的文档类,如果你想,或只是实例化它)...

顺便说一句.第一个跟踪显示,第二个示例有效,这也很明显,因为new XML()使用本机XML解析器XML从给定的字符串创建...

以下是上面生成的内容:



  ]]>

对我来说效果很好...... :)


格尔茨

back2dos



2> taudep..:

上面的cdata函数需要如下所示,注意最后一个">"在代码中被转义.否则会出现编译错误.

private function cdata(data:String):XML
{
    return new XML("");                
}

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有