CDATA не поддерживает чтение данных из XMLList - PullRequest
1 голос
/ 21 декабря 2011

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>

КОД

 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 ]

1 голос
/ 21 декабря 2011

Вот быстрый пример:

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 ...

1 голос
/ 21 декабря 2011

Я думаю, это из-за опечатки, когда вы закрываете тег 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>

, и все будет хорошо.

РЕДАКТИРОВАТЬ

As @OXMO456 упоминает.Разбор флэш-памяти не пройдет после первого атрибута _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>
...