Verarbeitung von XML-Dokumenten mit ActionScript
Die Beschreibungssprache XML (Extensible Markup Language), deren Potential in Verbindung mit XSL(T), usw. gewaltig ist, erfreut sich immer größerer Beliebtheit und Verbreitung. Dieser Bedeutung trägt Flash seit längerer Zeit Rechnung. Seit der Version 5 ist es nämlich mit ActionScript möglich, mithilfe der zahlreichen Methoden und Eigenschaften des XML - Objekts XML - Daten verhältnismäßig komfortabel zu verarbeiten und zu erzeugen.XML - Daten laden, interpretieren und manipulieren
ActionScript kann Daten von XML - Dokumenten, welche sich in der gleichen Subdomain wie der Flash film befinden, laden und interpretieren, wobei eine Vielzahl von Methoden und Eigenschaften des XML - Objekts die Navigation durch die Dokumentstruktur erleichtern. Um die Funktionsweise einiger dieser zu demonstrieren, sei das nachfolgende Beispiel angeführt. Um ein XML-Dokument handeln zu können, muss zunächst eine Instanz des XML-Objekts erzeugt und in diese die XML-Daten mithilfe der Objektmethodeload("URL")
geladen werden. Ein Beispiel:
myXML = new XML();
myXML.load("test.xml");
myXML.contentType = "text/xml";
myXML.onLoad = function(success)
{
if (success)
{
showInfos();
}
else
{
trace("XML-Daten konnten nicht geladen werden.");
}
}
my XML
des XML - Objekts erzeugt, in welche in der folgenden Anweisung die Daten des XML - Dokuments test.xml geladen werden. Im Anschluss wird ActionScript zudem der Mime-Type der geladenen Daten (text/xml
) mitgeteilt.Mithilfe der Methode
onLoad
des XML-Objekts wird aufgerufen, sobald die XML - Daten empfangen werden. Die in Verbindung notierte Methode erwartet einen Parameter booleschen Wertes. Wenn das XML - Dokument erfolgreich geladen werden konnte, wird dieser mit dem Wert true
belegt, so dass die Funktion showInfos()
aufgerufen wird. Andernfalls wird eine Fehlermeldung im Fenster ausgegeben.Das in diesem Beispiel geladene XML-Dokument besitzt folgende Struktur, wobei hier bewusst auf die Implementierung der Document Type Definition (DTD) verzichtet wurde:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<Sortiment>
<Artikel nr="1" name="Artikel 1">
<Infos>
<Hersteller id="1000" name="Hersteller 1"/>
<Beschreibung>
Beschreibung für Artikel 1
</Beschreibung>
</Infos>
<Bestand ist="45" soll="100"/>
</Artikel>
<Artikel nr="2" name="Artikel 2">
<Infos>
<Hersteller id="1001" name="Hersteller 2"/>
<Beschreibung>
Beschreibung für Artikel 2
</Beschreibung>
</Infos>
<Bestand ist="50" soll="50"/>
</Artikel>
</Sortiment>
showInfos()
gibt die Daten einiger ausgewählter Dokumentelemente aus und greift dazu auf einige spezifische Sammlungen und Attribute zurück:
function showInfos()
{
rootNode = myXML.firstChild;
trace("Datenbank: " + rootNode.nodeName);
for(myIndex in rootNode.childNodes)
{
actNode = rootNode.childNodes[myIndex];
//Gibt Nr. und Name sämtlicher Artikel aus
trace("Art.-Nr.: " + actNode.attributes["nr"] + " | " +
"Art.-Name: " + actNode.attributes["name"]);
//Gibt Herstellername des jeweiligen Artikels aus
trace("Hersteller: " +
actNode.childNodes[0].childNodes[0].attributes["name"]);
}
}
firstChild
des XML - Objekts bestimmt und dessen Name, d.h. wiederum dessen Eigenschaft nodeName
, ausgegeben. Anschließend werden in einer for..in
- Schleife alle Unterknoten (childs
) dieses mit rootNode
bezeichneten äußersten Knotens durchlaufen, wobei die Attribute nr
und name
jedes Unterknoten-Elements ausgegeben werden. Zur Bestimmung des jeweiligen Childknotens actNode
wird das Element des entsprechenden Indexes (Beginn bei 0!) der Sammlung childNodes
(Array von Childknoten) des übergeordneten Knotens rootNode
verwendet. Des Weiteren wird mithilfe einer mehrfachen Anwendung von childNodes
noch der Name des Herstellers des jeweiligen Artikels, d.h. das Attribut name
des Elements Hersteller
, ausgegeben.Natürlich ist es auch möglich, die in ein XML - Objekt geladenen XML - Daten zu manipulieren. So kann man zum Beispiel Werte von Attributen einfach überschreiben:
myXML.firstChild.childNodes[0].attributes["nr"] = 3;
//überschreibt Attribut nr des ersten Artikels
XML - Daten erzeugen
In ActionScript ist es darüber hinaus auch möglich, die Struktur eines geladenen XML - Dokuments zu erweitern, indem man neue Knoten an einer bestimmten Stelle hinzufügt, weitere Attribute für einen Knoten definiert, usw. Selbstverständlich kann man auch ein leerer XML - Objekt erzeugen und eine völlig neue Dokumentstruktur konstruieren. Ein Beispiel für ein derartiges ActionScript :myXML = new XML();
myXML.contentType = "text/xml";
myNewNode = myXML.createElement("Newstable");
myXML.appendChild(myNewNode);
myNewNode = myXML.createElement("News");
myNewNode.attributes.date = "01.01.1999";
myNewNode.attributes.author = "new Author";
myNewNode.attributes.title = "new Title";
myXML.childNodes[0].appendChild(myNewNode);
myNewNode = myXML.createTextNode("Text of the Newsnends here!");
myNewNode.nodeName = "Text";
myXML.childNodes[0].childNodes[0].appendChild(myNewNode);
createElement(ElementName)
des XML-Objekts ein neues Element, dessen Name die Methode als Argument erwartet, im Objekt my XML
erstellt. Dieser wird mithilfe der Methode appendChild(ChildKnoten)
als Childknoten der Childliste des XML - Objekts my XML
angehangen. Im Endeffekt repräsentiert dieser den Dokument-Knoten des später aus dem Objekt my XML
generierten XML - Dokuments. Im Folgenden wird wiederum ein neues Element namens News
mit der Methode createElement
erzeugt. Für dieses werden in den drei nachfolgenden Anweisungen die drei Attribute date
, author
und title
mit dem entsprechenden Wert initialisiert bzw. hinzugefügt. Das so erzeugte Element wird in der Childliste von my XML
dann unterhalb des zuvor erzeugten Child-Eintrags (Newstable
) mit der Methode appendChild
angehangen. Diesem Child-Eintrag wird dann ein Textknoten namens Text als Child-Eintrag angehangen. Dieser wurde zuvor mithilfe der Methode createTextNode("Text")
erzeugt, wobei der einzufügende Text durch den Parameter Text
an die Methode übergeben werden muss.Das erläuterte ActionScript erzeugt auf diese Weise ein XML - Objekt
my XML
, dessen XML - Dokumentstruktur wie folgt aussehe:
<Newstable>
<News date="01.01.1999" author="new Author" title="new Title">
<Text>Text of the News
ends here!
</Text>
</News>
</Newstable>
_self
(default), _blank
, _parent
, _top
übergeben werden, welcher angibt, in welchem Frame des Browserfensters die Rückgabe des Scripts auf dem Server erfolgen soll. Ein Beispiel:
myXML.send("test.php","_blank");
In diesem Beispiel würde das durch die Methodesend
aus dem XML-Objekt my XML
generierte XML-Dokument an ein PHP-Script test.php im gleichen Verzeichnis wie der Flash film gesendet werden, welches dann die Speicherung in einer externen XML-Datei auf dem Server vornehmen könnte. Für die Ausgaben des PHP-Scripts ist dann ein neues leeres Fenster (_blank
) vorgesehen.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project