CDATA不支持从XMLList读取数据

时间:2011-12-21 09:36:55

标签: actionscript-3 flash-cs5

XML:

  <catering>
        <contents>
        <![CDATA[
            <title>UPCOMING EVENTS</title>
            <info _title = "<font size='14' color='#ffffff'>title1</font" image="null"></info>
            <info _title = "title2" image="images/events/slide1.jpg"></info>
            <info _title = "title3 " image="images/events/slide2.jpg"></info>
            <info _title = "title4" image="images/events/slide3.jpg"></info>
            <info _title = "title5" image="images/events/slide4.jpg"></info>
            ]]
        </contents>
    </catering>

CODE

 eventTitle = loadXMLC.events_1_Contents.contents.title;
 xmlList_1 = loadXMLC.events_1_Contents.contents.info;
 for(i = 0;i < xmlList_1.@_title.length(); i++)
 {
    events_0_info.push(xmlList_1.@_title[i]);
    img_ary0.push(xmlList_1.@image[i]);

 }

没有CDATA我就能读懂XML。我需要做什么才能用CDATA读取数据?

我想为每个属性使用html标记。

2 个答案:

答案 0 :(得分:1)

我认为这是因为您正在关闭CDATA标记的拼写错误。尝试在最后添加>,如下所示:

<catering>
    <contents>
        <![CDATA[
            <title>UPCOMING EVENTS</title>
            <info _title = "<font size='14' color='#ffffff'>title1</font" image="null"></info>
            <info _title = "title2" image="images/events/slide1.jpg"></info>
            <info _title = "title3 " image="images/events/slide2.jpg"></info>
            <info _title = "title4" image="images/events/slide3.jpg"></info>
            <info _title = "title5" image="images/events/slide4.jpg"></info>
        ]]>
    </contents>
</catering>

你会很高兴。

修改

正如@ OXMO456所提到的那样。 Flash解析不会超过第一个_title属性。我认为你使用xml属性的方式是一种不好的做法。本质上,属性包含有关元素的信息,而不包含元素本身的内容。

也许您应该尝试稍微调整xml结构并尝试解析它。也许这样的事情可行:

<title>UPCOMING EVENTS</title>
<info>
    <title size="14" color="#ffffff">title1</title>
</info>
<info>
    <title>title2</title>
    <image>images/events/slide2.jpg</image>
</info>
<info>
    <title>title3</title>
    <image>images/events/slide3.jpg</image>
</info>
<info>
    <title>title4</title>
    <image>images/events/slide4.jpg</image>
</info>

答案 1 :(得分:1)

以下是一个简单的例子:

var data : XML = <catering>
    <contents>
        <![CDATA[
        <title>UPCOMING EVENTS</title>
        <info _title = "title2" image="images/events/slide1.jpg"></info>
        <info _title = "title3 " image="images/events/slide2.jpg"></info>
        <info _title = "title4" image="images/events/slide3.jpg"></info>
        <info _title = "title5" image="images/events/slide4.jpg"></info>
        ]]>
        </contents>
    </catering>;

CDATA标记之间的节点被视为文本(文本块)。您必须将此文本转换为有效的XML才能访问数据。

trace(XML(data.contents.children()).nodeKind());//text
var contents : XMLList = XML("<c>"+data.contents.toString()+"</c>").children();
trace(contents.toXMLString());

我从你的样本中删除了这一行:

<info _title = "<font size='14' color='#ffffff'>title1</font" image="null"></info>

Flash无法将此行转换为XML ...