Flash tip trik – zpracování XML dat
22.3.2007· Autor: Ondřej Brichta·
Počet komentářů: 7
V dnešním článku si ukážeme základní postupy, které lze použít při zpracování a načítání dat v podobě XML souborů.
XML data
Pokud se rozhodneme načítat do flashových projektů externí data a máme možnost si zvolit formát, ve většině případů budeme požadovat data v XML formátu. Je to ryze praktický krok, protože s daty v XML formátu se ve Flashi pracuje nejlépe. Navíc není nutné se XML dat nijak obávat, jedná se o velmi srozumitelný formát, který je navíc přehlednější než data v MIME formátu. Posuďte sami:
mime formát dat:
prvek_1_barva=zelená&prvek_1_text=ukázkový text&prvek_2_barva=žlutá&prvek_2_text=ukázkový text&prvek_3_barva=modrá&prvek_3_text=ukázkový text&
XML formát dat:
<data>
<prvek barva="zelená">
<text>Ukázkový text</text>
</prvek>
<prvek barva="žlutá">
<text>Ukázkový text</text>
</prvek>
<prvek barva="modrá">
<text>Ukázkový text</text>
</prvek>
</data>
Základní pravidla tvorby XML dokumentu
Abychom úspěšně načetli data do flashové aplikace, musíme dodržet několik základních pravidel tvorby XML dokumentu:
- každý element musí být ukončen pomocí značky „/"
Správný zápis:
<text>Ukázkový text</text>
Nesprávný zápis:
<text>Ukázkový text<text>
Správný zápis:
<prvek barva="modrá">
<text>Ukázkový text</text>
</prvek>
Nesprávný zápis:
<prvek barva="modrá">
<text>Ukázkový text</text>
<prvek>
- Elementy se nesmí vzájemně křížit
Správný zápis:
<prvek barva="modrá">
<text>Ukázkový text</text>
</prvek>
Nesprávný zápis:
<prvek barva="modrá">
<text>Ukázkový text</prvek>
</text>
- pokud chceme vložit speciální znaky (např. HTML tagy), použijeme CDATA sekci
<text><![CDATA[ Ukázkový <b>HTML</b> text ]]></text>
- XML dokument má pouze jeden hlavní element
Správný vzhled XML dokumentu:
<data>
<prvek barva="zelená">
<text>Ukázkový text</text>
</prvek>
<prvek barva="modrá">
<text>Ukázkový text</text>
</prvek>
</data>
Nesprávný vzhled dokumentu:
<data>
<prvek barva="zelená">
<text>Ukázkový text</text>
</prvek>
</data>
<data>
<prvek barva="modrá">
<text>Ukázkový text</text>
</prvek>
</data>
- pro správné načtení a zobrazení všech znaků používáme UTF-8 kódování
Pokud se chcete dozvědět o XML více, podívejte se například sem.
Načítání XML dat
Jak má správně vypadat XML soubor už víme, nyní jej načteme do flashové aplikace. použijeme přitom třídu XML:
data_xml = new XML();
data_xml.ignoreWhite = true;
data_xml.load("dats.xml");
data_xml.onLoad = function(succ:Boolean):Void {
if (succ) {
//skript po úspěšném načtení ....
} else {
trace("XML data nenačtena");
}
};
Při načítání externích dat (jakýchkoliv) bychom měli v každém případě zjišťovat jejich úspěšné načtení a podle toho reagovat ve skriptu aplikace. Nikdy nemůžeme spoléhat na to, že uživatel má tak rychlé připojení, že veškerá data mu budou ihned k dispozici.
I v případě načítání XML dat detekujeme jejich úspěšné načtení - použitím onLoad události k objektu třídy XML. Jak vidíme ve skriptu výše, nejedná se nijak náročný krok, pouze jako parametr funkce vytvoříme proměnnou „succ", na kterou se v další části skriptu podmínkou IF dotážeme a pokud bude její hodnota logické ano - true, znamená to, že se data úspěšně načetla.
Pokud v naší aplikaci máme skripty, které jsou závislé na načítání externích souborů., vždy je budeme spouštět až po detekování úspěšného načtení těchto dat.
Procházení XML dokumentem
Jakmile jsme XML soubor do Flashe načetli, budeme z něj chtít získat vložená data. Dejme tomu, že do flashové aplikace načítáme XML soubor:
<data>
<prvek barva="zelená">
<text><![CDATA[ Ukázkový <b>HTML</b> text ]]></text>
</prvek>
<prvek barva="žlutá">
<text>
<font> Ukázkový <b>HTML</b> text </font>
</text>
</prvek>
<prvek barva="modrá">
<text>Ukázkový text</text>
</prvek>
</data>
Abychom prošli všechny elementy „prvek", použijeme FOR cyklus a zároveň v něm využijeme funkci XML elementu „nextSibling()", která nám vrátí další element stejné úrovně:
data_xml = new XML();
data_xml.ignoreWhite = true;
data_xml.load("dats.xml");
data_xml.onLoad = function(succ:Boolean):Void {
if (succ) {
var num:Number = 0;
//procházení elementy XML objektu, vypsání jména elementu, hodnoty atributu
for (var element:XMLNode = this.firstChild.firstChild; element != null; element=element.nextSibling) {
num++;
trace("Element s názvem: "+element.nodeName);
trace("Pořadí: "+num);
trace("Hodnota atributu 'barva': "+element.attributes.barva);
trace("-----");
}
} else {
trace("XML data nenačtena");
}
};
Výstup v okně Output pak bude vypadat takto:

Při procházení XML daty používáme vlastnosti firstChild, která nás odkáže na první element daného objektu. Pokud se tedy odkazujeme přes this(objekt data_xml).firstChild, dostaneme zpět element „data". pokud postoupíme dále: this.firstChild.firstChild, dostaneme se na první element prvního elementu dokumentu, tedy na „prvek".
Funkce procházení celým XML dokumentem
Můžeme si také vytvořit funkci, která při svém spuštění projde kompletně celý XML dokument:
data_xml = new XML();
data_xml.ignoreWhite = true;
data_xml.load("dats.xml");
data_xml.onLoad = function(succ:Boolean):Void {
if (succ) {
//procházení pomocí funkce "zobraz_xml"
zobraz_xml(this.firstChild.firstChild, "---");
} else {
trace("XML data nenačtena");
}
};
zobraz_xml = function (node:XMLNode, odsazeni:String):Void {
for (var element:XMLNode = node; element != null; element=element.nextSibling) {
if (element.nodeType == 1) {
trace(odsazeni+" Element s názvem: "+element.nodeName);
if (element.hasChildNodes()) {
zobraz_xml(element.firstChild, odsazeni+"---");
}
} else if (element.nodeType == 3) {
trace(odsazeni+" Text elementu: "+element.nodeValue);
}
}
};
Funkce „zobraz_xml" projde kompletně celý strom a v tomto případě bude vypisovat buď název elementu - pokud zjistíme pomocí vlastnosti nodeType, že se jedná o klasický element (hodnota 1). Pokud se bude jednat o textový element (hodnota 3), necháme jej vypsat pomocí vlastnosti nodeValue.
Výsledný výpis pak bude:

Všimneme si, že v případě vkládání zvláštních znaků je vhodnější používat CDATA sekci, protože v opačném případě jsou jednotlivé HTML tagy brány jako další elementy XML dokumentu a pokud by obsahovaly nějaké chyby, mohlo by dojít k nesprávnému zpracování celého dikumentu.
Ondřej Brichta Vývojář multimediálních aplikací, šéfredaktor Flash.cz, školitel produktů Flash, Flex, Flash Media Server
Web:
http://www.obria.cz
|
Motto: <°))))><
Seriál:
Tipy a triky
Tipy a triky je seriál zaměřený na zajímavá řešení a vylepšení flashových aplikací