Flash AS3:XML和未定义的值

时间:2011-07-13 16:41:26

标签: xml flash actionscript-3 yql

我正在使用YQL尝试为我正在处理的项目找到乐队照片。如果找到了图像,则会在XML响应中返回该图像,并且我的Flash代码会将其发布。但如果找不到,我不太清楚怎么告诉flash不要做任何事情。这是我的代码:

XML.ignoreWhitespace = true;
    var groupPhotoXML = new XML (e.target.data);
    var imgRef = groupPhotoXML.results.img[0].@src;

    if (imgRef != undefined){
    //DO STUFF. THIS IF STATEMENT DOESN'T WORK THOUGH. ALSO TRIED if(groupPhotoXML != undefined)
    }

以下是成功的grouPhotoXML响应:

<query yahoo:count="1" yahoo:created="2011-07-13T16:35:21Z" yahoo:lang="en-US" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng">
  <results>
    <img alt="Syn photo" id="artistArtistImg" src="http://d.yimg.com/ec/image/v1/artist/266256;encoding=jpg;size=156x94" title="Syn photo"/>
  </results>
</query>

不成功的尝试追溯为空。

2 个答案:

答案 0 :(得分:3)

在尝试提取src属性之前,您应该检查是否存在resultsimg元素。试着这样做:

var imgRef:String;
if(groupPhotoXML.results && groupPhotoXML.results.img[0])
   imgRef = groupPhotoXML.results.img[0].@src;
else
   // The response was invalid

答案 1 :(得分:0)

当跟踪为空时,您可能会获得正确的节点,但您需要使用toXMLString()来查看它。

您可以通过检查XMLList的长度来检查img节点是否存在:

if(groupPhotoXML.results.img.length() > 0) trace('do something with the img nodes');

或者,如果你只需要没有空src属性的img节点,你可以检查像@taskinoor建议的空字符串,或者检查@src的长度:

imgs:XMLList = groupPhotoXML.results.img;
for each(var img:XML in imgs) if(img.@src.toXMLString().length > 0) trace('valid node',img.@src.toXMLString());