RSS XML mit Flash auslesen

verfasst 24.02.2008 von MediaCix | kurze URL: /t224 | 6 Kommentare

XML mit Flash auslesen

Es ist vielleicht nur ein ganz kleines Tutorial zum Thema XML mit Flash auslesen, aber vielleicht hilft es den einen oder anderen weiter. Als Beispiel benutze ich den RSS Feed (Feed) von dieser Seite und das Online-Beispiel von RSS FeedReader

Damit wir loslegen können, müssen natürlich ActionScripte geschrieben werden.
Als Kontrolle legen wir zunächst zwei dynamische Textfelder an, und vergeben die Variablen einmal ?blog_name? und einmal ?blog_info?. Hier sollen dann die Inhalte vom XML-File zu sehen sein, aber dazu später.

Kommen wir nun zu ActionScript. Damit Flash weis, von welcher URL der Feed ausgelesen werden soll, legen wir eine Variable dazu an. Das Anlegen der Variable hat auch den Vorteil, dass man später auch dynamische URLs laden können.

» Flash ActionScript
var file:String = 'http://www.cix-blog.de/feed';


Zum Einlesen von XML benutzen wir die XML-Klasse von Flash.
Womit wir um die Befehle firstChild und childNodes nicht herum kommen.
Vielleicht hilft es firstChild und childNodes besser zu erklären, wenn wir ein Beispiel haben.

Teil vom XML-Feed
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- generator="Laberbrett Edition" -->
<rss version="2.0">
   <channel>
      <item>
         inhalt
      </item>
      <item>
         inhalt
      </item>
   </channel>
</rss>


firstChild ist dabei der erste Child-Knoten im XML-File.
Im Beispiel ist der erste Child-Knoten der Inhalt zwischen ?rss version="2.0"? und ?/rss?.
Der zweite Child-Knoten ist dann der Inhalt von ?channel? bis ?/channel?.
Und hier liegen dann die eigentlichen Daten die wir haben wollen.

childNodes ist ein Array mit den Child-Knoten des angegebenen XML-Objekts.

Um mit Flash und der XML-Klasse auf den zweiten Child-Knoten zugreiffen zu können, schreiben wir:

» Flash ActionScript
blog = new XML();
blog.ignoreWhite = true;
blog.onLoad = function (success) {
 if (success) {
  trace(blog.firstChild.firstChild);
 }
}
blog.load(file);


Die Function onLoad() wird aufgerufen, wenn im Flash das XML-File empfangen wurde.
Mit trace() können Programm-Meldungen ausgegeben werden, also eine Form für Debuggen.
Diese Function ist ähnlich der PHP-Funktion print_r().
Wird die XML-Datei empfangen, erhalten wir eine Ausgabe vom Inhalt des zweiten Child-Knoten im Ausgabefenster.

Aber wir wollen die einzelnen Werte von ?title? und ?description? haben, und müssen deshalb nun das ganze rausfiltern.
Nehmen wir den Fall, das wir nicht wissen an welcher Stelle im XML-File ?title? und ?description? steht.
Dazu bevorzuge ich eine for-Schleife mit if-Abfragen.

» Flash ActionScript
blog = new XML();
blog.ignoreWhite = true;
blog.onLoad = function (success) {
 if (success) {

  for (i = 0; i < blog.firstChild.firstChild.childNodes.length; i++) {

   // nach Blog Title suchen
   if ( blog.firstChild.firstChild.childNodes[i].nodeName == 'title')
    blog_name = blog.firstChild.firstChild.childNodes[i].firstChild;

   // nach Blog Description suchen
   if ( blog.firstChild.firstChild.childNodes[i].nodeName == 'description')
    blog_info = blog.firstChild.firstChild.childNodes[i].firstChild;

  }
 }
}
blog.load(file);


Diese Variante ist zwar ein kleiner Umweg, hat aber den Vorteil, wenn sich die XML-Struktur ändert, findet das Script dennoch die gesuchten Werte. Natürlich geht es auch einfacher und gezielter, aber nur wenn die Struktur vom XML-File IMMER gleich bleibt.

» Flash ActionScript
blog = new XML();
blog.ignoreWhite = true;
blog.onLoad = function (success) {
 if (success) {

 // <link>text</link>
 blog_name = blog.firstChild.firstChild.childNodes[0].firstChild;
 // <description>text</description>
 blog_name = blog.firstChild.firstChild.childNodes[2].firstChild;

 }
}
blog.load(file);


Wenn nun das XML-File empfangen wurde, sollten jetzt in unseren vorher erstellten Textfeldern die gesuchten Inhalte vom XML-File stehen.

Gehen wir aber noch ein Schritt weiter und tiefer, denn wir wollen auch noch die restlichen Inhalte vom XMl-File haben.
Ich persönlich bevorzuge dazu, mir zusätzliche Arrays anzulegen um die Inhalte in diese Arrays abzulegen.
Später hat es den Vorteil, dass man die Inhalte auch besser sortieren kann bzw. dass sie sich flexibler bearbeiten lassen.
Als einfache Variante definieren wir nun unsere Arrays.

» Flash ActionScript
var file:String = 'http://www.mediacix.de/blog/feed';

// für die Inalte
var item_array_datum:Array = Array();
var item_array_title:Array = Array();
var item_array_link:Array = Array();
var item_array_des:Array = Array();


Natürlich können die Daten auch in ein mehrdimensionales Array abgelegt werden.
Aus dem XML-File ist ersichtlich, dass die Inhalte jeweils in ?item? - also im nächsten Child-Knoten stehen.
Daraus ergibt sich dann diese Erweiterung:

» Flash ActionScript
blog = new XML();
blog.ignoreWhite = true;
blog.onLoad = function (success) {
 if (success) {

  for (i = 0; i < blog.firstChild.firstChild.childNodes.length; i++) {

   // nach Blog Title suchen
   if ( blog.firstChild.firstChild.childNodes[i].nodeName == 'title')
    blog_name = blog.firstChild.firstChild.childNodes[i].firstChild;

   // nach Blog Description suchen
   if ( blog.firstChild.firstChild.childNodes[i].nodeName == 'description')
    blog_info = blog.firstChild.firstChild.childNodes[i].firstChild;

   // nach Blog Beiträge mittels item suchen
   if ( blog.firstChild.firstChild.childNodes[i].nodeName == 'item') {
   
    for (b = 0; b < blog.firstChild.firstChild.childNodes[i].childNodes.length; b++) {

     // Titel von item -> title suchen
     if ( blog.firstChild.firstChild.childNodes[i].childNodes[b].nodeName == 'title') 
      item_array_title.push(blog.firstChild.firstChild.childNodes[i].childNodes[b].firstChild);

     // Link von item -> link suchen
     if ( blog.firstChild.firstChild.childNodes[i].childNodes[b].nodeName == 'link') 
      item_array_link.push(blog.firstChild.firstChild.childNodes[i].childNodes[b].firstChild);

     // usw. usw. 
    }
   }
  }
 }
}
blog.load(file);

Vielleicht konnte ich dieses Thema etwas näher bringen.
[Änderungen vorbehalten]

bisherige Kommentare

1
16.07.2009
[Usenet] meint dazu:
Super Artikel, jetzt muss ich nur noch jemanden finden der Ahnung davon hat und mir das ganze nochmal im Detail erklären kann.

2
03.11.2009
The Lone Rangers meint dazu:
Zitat von Usenet

„Usenet meint dazu:
Super Artikel, jetzt muss ich nur noch jemanden finden der Ahnung davon hat und mir das ganze nochmal im Detail erklären kann.”



Learning by doing... kopier den Text und änder spiel ein wenig in der XML und in der Flash Datei rum..so schwer is dat net ^_^

3
20.03.2010
Sebsen meint dazu:
Ich weiß, der Eintrag ist älter, wollte aber auch mal meinen Dank aussprechen. Viele vergessen, dass solche Tuts zu schreiben auch Arbeit macht, und des Weiteren ist es auch noch gut :)

4
14.05.2010
Tommy meint dazu:
Ich schnalls ned! Bei mir funktioniert nichts. Kannst du die fla datei zum download anbieten?

5
14.05.2010
RYK meint dazu:
Bei mir wird kein Inhalt angezeigt, ich habe den feed von Wordpress genommen. Dyn Textfelder mit Instanzen sind vorhanden. Das xml wird auch geladen keine Fehler. Flash-Datei zum Download wäre klasse! Viele GRüße

6
14.05.2010
Mario meint dazu:
Also gleich mal vorweg - irgendwas kopieren, einfügen und starten funktioniert natürlich nicht. In der FLA-Datei steht nicht mehr drin, wie oben schon erwähnt wurde. Natürlich muss man das Auslesen der XML auf SEINE XML-Struktur anpassen!!!

neuen Kommentar schreiben

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



Themen mit ähnlichen Inhalten


Tags zum Beitrag

xml     flash     firstchild     childnodes