Flash AS3: XML и неопределенные значения - PullRequest
2 голосов
/ 13 июля 2011

Я использую YQL, чтобы попытаться найти фотографии группы для проекта, над которым я работаю.Если изображение найдено, оно возвращается в ответе XML, и мой флэш-код публикует его.Но если один не найден, я не совсем уверен, как сказать 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 ]

3 голосов
/ 13 июля 2011

Прежде чем пытаться извлечь атрибут src, проверьте, существуют ли элементы results и img. Попробуйте сделать это:

var imgRef:String;
if(groupPhotoXML.results && groupPhotoXML.results.img[0])
   imgRef = groupPhotoXML.results.img[0].@src;
else
   // The response was invalid
0 голосов
/ 13 июля 2011

Вы можете получить правильный узел, когда трассы пусты, но вам нужно использовать toXMLString () , чтобы увидеть его.

Вы можете проверить наличие узла img, проверив длину XMLList:

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

или, если вам нужны только узлы img, у которых нет пустого атрибута src, вы можете проверить наличие пустой строки, как предлагает @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());
...