На мой взгляд, лучший способ хранения XML-данных - использовать классы, посмотрите на следующий пример:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var playlistXml:XML = <playlist>
<track>
<title>TestTrack 1</title>
<band>Band1</band>
<file>test1.mp3</file>
</track>
<track>
<title>TestTrack 2</title>
<band>Band2</band>
<file>test2.mp3</file>
</track>
<track>
<title>TestTrack 3</title>
<band>Band3</band>
<file>test3.mp3</file>
</track>
<track>
<title>TestTrack 4</title>
<band>Band4</band>
<file>test4.mp3</file>
</track>
</playlist>;
var playlist:Playlist = new Playlist(playlistXml);
var track:Track = playlist.getTrackByTitle("TestTrack 1");
trace(track.band); // output: Band1
}// end function
}// end class
}// end package
internal class Playlist
{
private var _tracks:Vector.<Track>;
public function Playlist(playlistXml:XML)
{
_tracks = new Vector.<Track>();
for each(var track:XML in playlistXml.children())
{
_tracks.push(new Track(track.title, track.band, track.file));
}// end for each
}// end function
public function getTrackByTitle(title:String):Track
{
var track:Track;
for each(var t:Track in _tracks)
{
if (t.title == title) track = t;
}// end for each
if (!track) throw new Error("Could not find track with title " + "\"title\".");
return track;
}// end function
public function getTrackByBand(band:String):Track
{
var track:Track;
for each(var t:Track in _tracks)
{
if (t.band == band) track = t;
}// end for each
if (!track) throw new Error("Could not find track with band " + "\"band\".");
return track;
}// end function
public function getTrackByFile(file:String):Track
{
var track:Track;
for each(var t:Track in _tracks)
{
if (t.file == file) track = t;
}// end for each
if (!track) throw new Error("Could not find track with file " + "\"file\".");
return track;
}// end function
}// end class
internal class Track
{
private var _title:String;
private var _band:String;
private var _file:String;
public function get title():String { return _title }
public function get band():String { return _band }
public function get file():String { return _file }
public function Track(title:String, band:String, file:String)
{
_title = title;
_band = band;
_file = file;
}// end function
}// end class
В классе документов Main
есть объект playlistXml
с плейлистомxml-данные (не поместил код для загрузки, потому что я не хотел делать код больше, чем он был, ну, конечно).
Затем следует объект Playlist
.Это объект класса, который обрабатывает разбиение узлов трека в xml и сохраняет их в Track
объектах.Кроме того, класс Playlist
имеет три открытых метода, называемых getChildByTitle()
, getChildByBand()
, getChildByFile()
, которые выполняют поиск и указанную дорожку соответствующим методом.
Преимущество этого подхода заключается в том, что он создает надежную конструкцию для хранения ваших данных и позволяет легко их извлекать.
var track:Track = playlist.getTrackByTitle("TestTrack 1");
trace(track.band); // output: Band1