Значение атрибута тега XML XML / разбор свойств - PullRequest
0 голосов
/ 24 сентября 2010

Я попытаюсь спросить это так, чтобы это имело некоторый смысл.

У меня есть RSS-лента, в Flex я подключился к каналу через HTTPService, структура XML выглядит следующим образом (не точно, но для цели вопроса).Я могу пройтись по xml и получить доступ к данным в узлах title и link с успехом, но когда я получаю узел description и пытаюсь получить доступ к атрибутам img и src внутри него, я не добился успеха.Читая о парсинге с e4x, я получаю следующий пример:

var xList:XMLList = xData.channel.item.description.(attribute("src"));

или

var xList:XMLList = xData.channel.item.description.(@src);

Я потерян в этот момент, не уверен, куда я иду отсюда и был бы признателенс этой точки зрения.

<rss>
<channel>
    <item>
        <title><![CDATA[some text]]></title>
        <link><![CDATA[a link]]></link>
        <description><![CDATA[<table border="0" cellpadding="8"><tr><td width="80px"><a href="http://anAddress"><img border="0" src="http://anAddress.jpg"></a></td><td><strong>someText</strong><br>someText<br>someText<br><a href="http://anAddress">someText</a> | <a href="http://anAddress">someText</a></td></tr></table>]]></description>
    </item>
</channel>

<fx:Script>
    <![CDATA[

        [Bindable]
        private var xData:XML;

        import mx.events.FlexEvent;
        import mx.rpc.events.ResultEvent;

        protected function appCompleteHandler(event:FlexEvent):void{
            myService.send();
        }

        private function getList():void{
            var xList:XMLList = xData.channel.item.description;
            output.text = xList.toString();
        }

        private function rssResult(event:ResultEvent):void{
            xData = event.result as XML;
        }

    ]]>
</fx:Script>

    <s:controlBarContent>
    <s:Button label="Get List" click="getList()"/>
    <s:Button label="Change Data"/>
</s:controlBarContent>
<s:TextArea id="output" width="100%" height="100%"
    text="{xData.toString()}" fontSize="16"/>

1 Ответ

0 голосов
/ 27 сентября 2010

Похоже, что это CDATA в узле описания.Все, что заключено в CDATA, не анализируется и рассматривается как текст.Если у вас есть контроль над данными, вы можете просто избавиться от тега CDATA.В противном случае вы можете заново проанализировать текст описания, выполнив что-то вроде:

var descXml:XML = new XML(xData.channel.item.description.toString());
trace(descXml..@src);

Однако я вижу, что содержание html в описании является недопустимым, что, я думаю, объясняет, почему CDATA был добавленпервое место.Если у вас нет контроля над этим содержимым (чтобы закрыть теги img и br), вы можете попробовать очистить атрибут src с небольшим регулярным выражением.

...