2010-09-24 75 views
0

我会尝试以一种合理的方式提出这个问题。Flex XML标记属性值/属性解析

我有一个RSS源,在Flex内我已经通过HTTPService连接到源,其XML结构如下(不是确切的,但为了问题的目的)。我能够走下XML并在标题和链接节点内成功访问数据,但是当我得到描述节点并尝试访问其中的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"/> 

回答

0

它看起来像它的描述节点内的CDATA。 CDATA中包含的任何内容都不会被解析,只会被视为文本。如果你能控制数据,你可以试着摆脱CDATA标签。否则,你可以重新解析说明文字再次做这样的事情:

var descXml:XML = new XML(xData.channel.item.description.toString()); 
trace([email protected]); 

不过,我现在看到的描述中的HTML内容无效,我的猜测是,为什么CDATA在那里被扔在第一地点。如果你无法控制这些内容(关闭img和br标签),你可以尝试用一些正则表达式来修改src属性。