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