Výuka Flash (15.)

Úvod

XML (eXtensible Markup Language) představuje jednu z forem komunikace, kdy se využívá textových souborů. Skladba těchtou souborů se do jisté míry podobná HTML, nalezneme zde tagy, atributy, které tvoří určitou strukturu. Jako příklad bychom si mohli ukázat jednoduchý XML soubor:

<knihovna>
  <kniha>
    <jmeno>Kniha</jmeno>
    <autor>Autor knihy</autor>
  </kniha>
</knihovna>

XML vyžaduje, aby všechny tagy byly párované (měli svůj uzavírací tag) a jednotlivé atributy byly uvedeny v uvozovkách. Flash pro práci s XML nevyžaduje ani definici XML, která bývá na začátku dokumentu.

Instanci XML objektu vytvoříme pomocí deklarace:

var xmlObjekt = new XML();

Samotné načtení dat má na starosti metoda load, která přebírá cestu k souboru.

xmlObjekt.load("soubor.xml");

Normálně XML pokládá všechny tabulátory, zalomení za důležité a někdy mohou při načítání způsobit potíže. Vypnout je můžeme pomocí vlastnosti ignoreWhite nastavením na hodnotu true (někdy naopak bude potřeba zachovat strukturu dokumentu ve výchozím stavu a tuto vlastnost dát na false).

xmlObjekt.ignoreWhite = true;

Nyní, kdy máme data načtena, je můžeme zpracovat. Můžeme využít události onLoad a reagovat tak na načtení dat ze souboru. Jako název se dosazuje název funkce, která bude obsahovat parametr (success), pomocí kterého můžeme porovnávací konstrukcí if poznat, zda načtení dat proběhlo v pořádku.


xmlObjekt.onLoad= Nacteni;
function Nacteni(success){
	if (success){
		// Tady již můžeme zpracovávat data.
	}else{
		trace("Nastala chyba!");
	}
	
}

Nyní bychom se měli dostat již k samotnému získávání dat ze XML souborů. XML soubor se skládá z takzvané Root node (nejvyšší uzel), Child nodes (potomci) a z uzlů, jež se nacházejí ve stejné úrovni (tzv. Siblings nodes - sourozenci).

Nodes

Hlavní uzel (Root node) získáme pomocí vlastnosti firstChild:

hlavni = xmlObjekt.firstChild;

Jednotlivé další uzly můžeme získat pomocí neustálého odvozování (viz. příklad výše) nebo také pomocí vlastnosti childNodes, která obsahuje kolekci uzlů. U každého uzlu můžeme určit vlastnosti:

Náš příklad uváděný na začátku má následující strukturu:

<knihovna> - childNodes[0].nodeName
  <kniha> - childNodes[0].childNodes[0].nodeName
    <jmeno> - childNodes[0].childNodes[0].childNodes[0].nodeName
	Kniha - childNodes[0].childNodes[0].childNodes[0].childNodes[0].nodeValue
	</jmeno>
    <autor> - childNodes[0].childNodes[0].childNodes[1].nodeName
	Autor knihy - childNodes[0].childNodes[0].childNodes[1].childNodes[0].nodeValue
	</autor>
  </kniha>
</knihovna>

V případě, že některý uzel bude obsahovat atributy, můžeme je získat pomocí vlastnosti attributes.<název atributu> nebo také attributes["název atributu"].


Metody objektu XML

Nyní si ukážeme jednotlivé vlastnosti a metody, které se při práci s XML ve Flashi využívají.

appendChild

Umožňuje přidat Child node na zvolené místo.


cloneNode

Umožňuje duplikovat zvolený uzel stejného názvu, hodnoty, atributů. Jestliže je jako parametr dosazena hodnota true, zkopíruje se rekurzivně celý strom uzlů (přesná kopie).


createElement

Umožňuje přidat nový prázdný element s názvem uvedeným jako parametr.


createTextNode

Vytvoří nový Text node s názvem uvedeným jako parametr.


getBytesLoaded

Vrátí počet již načtených bajtů XML souboru.


getBytesTotal

Vrátí velikost XML souboru.


hasChildNodes

Vrátí hodnotu true v případě, že zvolený XML objekt obsahuje Child node.


insertBefore

Metoda, která umožňuje přidat Child node před zvolený uzel.


load

Již zmíněná metoda, která slouží k načtení XML souboru.


parseXML

Umožňuje zpracovat zvolený text zadaný jako parametr (vznikne nová stromová struktura).


removeNode

Smaže zvolený uzel.


send

Pošle zvolený XML objekt na uvedenou HTTP adresu metodou POST. Jako druhý parametr se dosazuje typ okna, které se otevře po návratu dat (_self, _blank, _parent, _top).


sendAndLoad

Pošle zvolený XML objekt na uvedenou HTTP adresu metodou POST. Jako druhý parametr se zadává objekt, který bude vytvořen jako odpověď ze serveru.


toString

Převede zvolený objekt na textovou hodnotu.


Vlastnosti objektu XML

Nyní si ukážeme jednotlivé vlastnosti a vysvětlíme si, k čemu slouží.


attributes

Asociativní pole, jenž obsahuje atributy zvoleného objektu. Přistupovat k této vlastnosti můžeme pomocí dvou způsobů:

<objekt>.attributes.<název atributu>;

<objekt>.attributes["název atributu"];

contentType

Vrací MIME typ metody, kterou byla odeslána na server pomocí metody send a sendAndLoad data. Výchozí je "application/x-www-form-urlencoded".


childNodes

Vrací pole všech uzlů zvoleného objektu.


docTypeDecl

Vlastnost, pomocí níž můžeme získat a nastavit DOCTYPE deklaraci načteného XML souboru.


firstChild

Vlastnost, pomocí níž můžeme získat první uzel ve zvoleném objektu.


ignoreWhite

Vlastnost, kterou jsme si již popsali a umožňuje nastavit ignorování mezer.


lastChild

Opak vlastnosti firstChild, která vrací poslední uzel ve zvoleném objektu.


loaded

Vrátí hodnotu true v případě, že byl celý soubor (XML.load) úspěšně načten. V opačném případě vrací hodnotu false.


nextSibling

Vrátí další tzv. Sibling node (sourozenec) daného objektu.


nodeName

Již zmíněná vlastnost, která obsahuje název daného uzlu.


nodeType

Již zmíněná vlastnost, která obsahuje typ daného uzlu.


nodeValue

Již zmíněná vlastnost, která obsahuje typ daného uzlu.


parentNode

Vrátí rodičovský uzel daného objektu.


previousSibling

Opak vlastnosti nextSibling vracející předchozí Sibling node.


status

Vrací číslo, vyjadřující stav načtení dokumentu:


xmlDecl

Vrací XML deklaraci, kterou obsahuje zvolený soubor.


Závěr

Práce s XML ve Flashi je opravdu rozmanitá. Dává nám mnoho možností, jak dokumenty číst a zpracovávat. Pro podrobnější dokumentaci XML bych doporučil řadu knih, které vyšly na našem trhu.


Pro tento díl to bude vše. V příštím díle budeme pokračovat v povídání o ActionScriptu.

Petr Rympler