XML в Actionscript 3?
Я пытался извлечь треки из моего XML-файла, который выглядит следующим образом
<?xml version="1.0"?>
<tracklist>
<track ID="4" title="Track01" artist="Artist01" url="" length="" coverURL=""/>
<track ID="1" title="Track02" artist="Artist02" url="" length="" coverURL=""/>
<track ID="8" title="Track03" artist="Artist03" url="" length="" coverURL=""/>
</tracklist>
в массив в ActionScript 3.
Я не мог понять это.
Я попробовал это так:
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("http://localhost:8888/Fabse/src/getCommonPlaylist.php"));
myLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void
{
var xml:XML= new XML(e.target.data);
xml.ignoreWhitespace=true;
var list:XMLList = XMLList(xml.track);
}
Затем я попробовал миллиард способов вытащить данные из списка или переменную "xml", оставив только пустые следы и безуспешно. Единственное, что работает, - это трассировка (xml.track), которая отслеживает все объекты трека.
Что я делаю неправильно?
Заранее спасибо,
Matteo
3 ответа
Чтобы получить один контент, попробуйте это как..
trace(xml.elements("track").length()); // 3
trace(xml.elements("track")[0].toXMLString()); // <track ID="4" title="Track01" artist="Artist01" url="" length="" coverURL=""/>
trace(xml.name().localName); // tracklist
trace(xml.attributes()[0]); // 4
trace(xml.attributes()[0].name()); // ID
Вы можете использовать foreach для зацикливания объекта XML и присвоения значения вашему массиву. В вашем случае вам нужно вызвать xml.tracklist.track[0], xml.tracklist.track[1] и т. Д., Чтобы получить соответствующий трек.
Я думаю, что вы делаете правильные вещи. Просто помните, что у вас есть пустые узлы XML, и вы используете атрибуты.
По умолчанию я думаю, что toString() использует значение текстового узла, поэтому вы можете использовать toXMLString() при отладке.
Попробуйте что-то вроде этого:
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("http://localhost:8888/Fabse/src/getCommonPlaylist.php"));
myLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void
{
var xml:XML= new XML(e.target.data);
xml.ignoreWhitespace=true;
var tracks:XMLList = xml.track;
trace("tracks\n",tracks);
for each(var track:XML in tracks) trace('track',track,'track.toXMLString()',track.toXMLString());
}
Обратите внимание на след для каждого трека, если я просто сделаю track
ничего не отображается, хотя узел есть, но при использовании track.toXMString() отображается все XML-содержимое узла (не только текстовое содержимое).