RSS XML mit AS3 auslesen

verfasst 02.01.2009 von MediaCix | kurze URL: /t527 | 1 Kommentare

XML mit AS3 auslesen

Bisher habe ich mit AS3 nicht viel gemacht, da die Umstellung von AS2 auf AS3 recht gewöhnungsbedürftig ist. Saubere Programmierung bei AS3 ist Pflicht, sonst kommt man nicht weit. Jedenfalls habe ich mal versucht nun mit AS3 ein XML-Feed auszulesen. Im Anschluss ein kleines Tutorial wie es funktioniert.

Die Test-XML ist dabei ein Feed-Link von diesem Blog:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- generator="Laberbrett Edition" -->
<rss version="2.0">
 <channel>
 <title><![CDATA[CIX BLOG]]></title>
 <link>http://www.cix-blog.de/</link>
 <description><![CDATA[Beiträge und Berichte]]></description>
 <pubDate>Thu, 01 Jan 2009 22:18:27 GMT</pubDate>
 <language>de</language>
 <item>
 <title><![CDATA[Sylvester 2008/2009 - gut angekommen?]]></title>
 <link>http://www.cix-blog.de/Sylvester-2008-2009-gut-angekommen-525-2009.html</link>
 <comments>http://www.cix-blog.de/Sylvester-2008-2009-gut-angekommen-525-2009.html#comments</comments>
 <pubDate>Thu, 01 Jan 2009 16:56:36 GMT</pubDate>
 <creator><![CDATA[MediaCix]]></creator>
 <category><![CDATA[Allgemein]]></category>
 <guid>http://www.cix-blog.de/Sylvester-2008-2009-gut-angekommen-525-2009.html</guid>
 <description><![CDATA[Na sind wir gut angekommen in das neue Jahr?]]></description>
 <commentRss>http://www.cix-blog.de/feed_blog_525</commentRss>
 </item>
 <item>
 <title><![CDATA[TV-Sender - einschlafen mit Astro TV]]></title>
 <link>http://www.cix-blog.de/TV-Sender-Astro-TV-521-2008.html</link>
 <comments>http://www.cix-blog.de/TV-Sender-Astro-TV-521-2008.html#comments</comments>
 <pubDate>Tue, 30 Dec 2008 22:35:54 GMT</pubDate>
 <creator><![CDATA[MediaCix]]></creator>
 <category><![CDATA[Allgemein]]></category>
 <guid>http://www.cix-blog.de/TV-Sender-Astro-TV-521-2008.html</guid>
 <description><![CDATA[Es ist der 30.12.08 23:30 Uhr und kein Schwein ruft bei Astro TV an.]]></description>
 <commentRss>http://www.cix-blog.de/feed_blog_521</commentRss>
 </item>
 </channel>
</rss>


Bei AS3 ist es eigentlich gar nicht so kompliziert, wenn es man es weis :) Der Zugriff auf die XML erfolgt wie im folgenden Beispiel:

» Flash ActionScript
// bei AS3 muss alles ordentlich definiert werden
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();

// Registriert ein Ereignis-Listener-Objekt
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);

// eine URLRequest-Klasse
xmlLoader.load(new URLRequest('http://www.cix-blog.de/feed-Allgemein'));


Nun wird eine Event-Klasse verwendet, die beim Auftreten eines Ereignisses als Parameter an Ereignis-Listener übergeben wird.

» Flash ActionScript
function LoadXML(e:Event):void {
 xmlData = new XML(e.target.data);
 trace(xmlData);
}


Mittels trace() kann jetzt schon der XML-Stream gelesen werden. Da ich aber nur die untergeordneten Knoten des XML-Objekts haben will, wird diese Funktion etwas verändert. Im nächsten Beispiel will ich nur die Knoten ?title? haben. Anders als bei AS2 mit firstChild oder childNodes ist bei die Schreibweise bei AS3 vereinfacht.

» Flash ActionScript
function LoadXML(e:Event):void {
 xmlData = new XML(e.target.data);
 //trace(xmlData);
 var blog_title:XMLList = xmlData.channel.item.title.children();
 for (var i:Number = 0; i < blog_title.length(); i++) {
  trace ( blog_title[i] );
 }
}


Im Prinzip ist das schon alles. Bei den meisten Anwendungen ist es aber hilfreich, wenn die Daten in einen Array stehen, auf das man im kompletten Flash zugreiffen kann. Hier benutze ich meistens eine Hilfs-Array.

» Flash ActionScript
// ein Array definieren
var array_title:Array = new Array();

function LoadXML(e:Event):void {
 xmlData = new XML(e.target.data);
 //trace(xmlData);
 var blog_title:XMLList = xmlData.channel.item.title.children();
 for (var i:Number = 0; i < blog_title.length(); i++) {
  array_title.push ( blog_title[i] );
 }
}


Mittels array_title.length() kann dann im Flash-Film noch abgefragt werden, ob dieses Array auch wirklich Daten enthält. Entsprechend der Abfrage und Resultat können weitere Aktion im Flash gestartet werden. In diesem Zusammenhang noch ein Beispiel mit dem bisherigen onEnterFrame bei AS2. onEnterFrame gibt es natürlich auch bei AS3, sieht allerdings etwas anders aus.

Im nächsten Beispiel soll der Inhalt vom Array erst dann angezeigt werden, wenn dieses auch Daten enthält.

» Flash ActionScript
function GetArray() {
 trace( array_title );
}

addEventListener(Event.ENTER_FRAME, meine_funktion);
function meine_funktion(event:Event) {
 if ( array_title.length >= 1 ) {
  GetArray();
  trace('Daten sind geladen' );
  this.removeEventListener(Event.ENTER_FRAME, meine_funktion);
 }
}


Ja mehr gibt es erstmal nichts zu erwähnen :)

bisherige Kommentare

1
16.04.2010
Unbekannt meint dazu:
Find ich gut erklärt, danke!

neuen Kommentar schreiben

Ich möchte automatisch eine E-Mail bei neuen Kommentaren erhalten.



Themen mit ähnlichen Inhalten


Tags zum Beitrag

urlrequest     addeventlistener     loadxml     removeeventlistener