Uživatelské nástroje

Nástroje pro tento web


vyuka:xml

Práce s XML

XML představuje standard, který umožní jednoduchým způsoben předávat data mezi různými programy a různými počítači jako speciálním způsobem uspořádaný textový řetězec.

Jeho strukrura je velmi jednoduchá:

<nzev_položky>
  obsah položky
</nzev_položky>

Položka může mít atributy:

<nzev_položky  název_atributu="hodnoty atributu">
   obsah položky
</nzev_položky>

Položka může obsahovat pouze atributy, pak na konci píšeme “/>“:

<název_položky atribut1=„hodnota1“ atribut2=„hodnota2“ atribut3=„hodnota3“… />

Důležité je, že obsahem položky může být zase struktura XML - XML struktury tedy mají hierarchické uspořádání:

<nzev_položky>
   <dceiná_položka>
       obsah dceřiné položky
   </dceiná_položka>
   <dalí_dceřiná_položka>
       obsah další dceřiné položky
   </dalí_dceřiná_položka>
</nzev_položky>

příklad XML strutkury:

  <fotogalerie x="200" y="200" nazev="fotogalerie01">
           <fotka id="btn1">
           <soubor>
                pic01.jpg
           </soubor> 
           <popis>
               Tohle je prvni fotka
           </popis> 
      </fotka>
            <fotka id="btn2">
            <soubor>
                foto02.jpg
             </soubor> 
             <popis>
                Tohle je druha fotka
             </popis> 
     </fotka>
             <fotka id="btn3">
             <soubor>
                 foto03.jpg
             </soubor> 
             <popis>
                 <![CDATA[ Tohle <b>je treti</b> fotka
                  ]]> 
             </popis>
        </fotka>
             <fotka id="btn4">
             <soubor>
                   foto04.jpg
              </soubor> 
              <popis>
                   Tohle je ctvrta fotka
              </popis> 
        </fotka>
              <fotka id="btn5">
              <soubor>
                   foto05.jpg
              </soubor> 
              <popis>
                  Tohle je pata fotka
              </popis> 
      </fotka>
  </fotogalerie>

Jak načíst XML v textové podobě (soubor "Data.XML") do instance třídy XML

Při vytváření instanace třídy XML zadáme obsah xml struktury definicí při konstrukci:

var xml:XML = 
        <body>
            <p>hello</p>
        </body>;

nebo (což jer lepší) výraz zadáme jako parametr konstruktoru

  var xml=new XML("<telo><p>ahoj</p></telo>");

nebo mu konstruktoru předáme obsah, který jsme načetly do instance třídy proměnné loader, která je instancí třídy URLLoader:

  var xml = new XML(loader.data);

Do loaderu ale nedříve musíme soubor načíst. Děláme to obdobně jako při načítání obrázku:

var xml:XML; // definujeme objekt třídy XML (ale zatím ho venytvoříme)
var loader:URLLoader = new URLLoader(); //vytvoříme "ládovač"
loader.load(new URLRequest("Data.xml")); //naládujeme obsah (jako parametr metody load je instance třídy URLRequest

loader.addEventListener(Event.COMPLETE,dataNactena); //k události Event.COMPLETE 
                                                     //přiřadíme na událost reagující funkci "dataNactena"


//definujeme funkci dataNactena, která se zavolá až sse všechna data načtou
function dataNactena(e:Event){                
	trace("Data nactena");
	xml = new XML(loader.data); //TEĎ TEPRVE VYTVÁŘÍME INSTANCI XML 
	....

}

Jak se hrabat ve struktuře XML

Použijeme data z předchozího příkladu:

	trace(xml); //vypise celou XML strukturu
	trace(xml.fotka);//vypise vsechnz fotky
	trace(xml.fotka[0]); //vypise fotku s na poradi 0 (cisluje od nuly)
	trace(xml.fotka.(@id==1));//vypise fotku s parametrem id rovnym 1
	trace(xml.fotka.(@id>2));//vypise fotky s parametrem id vetsim nez 2
	trace(xml.fotka.(soubor=="pic01.jpg"));//vypise fotku s obsahem uzlu soubor rovnym pic01.jpg
	trace(xml.fotka.(soubor=="pic01.jpg").popis); //vypíše popis pokud uzel obsahuje v položce soubor "pic01.jpg"

Kód příkladu

var xml:XML;
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("Data.xml"));

loader.addEventListener(Event.COMPLETE,dataNactena);

function dataNactena(e:Event){
	trace("Data nactena");
	xml = new XML(loader.data);
	
	//trace(xml); //vypise celou XML strukturu
	//trace(xml.fotka);//vypise vsechny fotky
	//trace(xml.fotka[0]); //vypise fotku s poradovym cislem 0 (cisluje od nuly)
	//trace(xml.fotka.(@id==1));//vypise fotku s parametrem id rovnym 1
	//trace(xml.fotka.(@id>2));//vypise fotky s parametrem id vetsim nez 2
	//trace(xml.fotka.(soubor=="pic01.jpg"));//vypise fotku s obsahem uzlu soubor rovnym pic01.jpg
	//trace(xml.fotka.(soubor=="pic01.jpg").popis);//vypise popis fotky ulozene v souboru pic0.jpg
	trace(xml.fotka.(@id=="btn1").soubor);
	
	btn1.label.text=xml.fotka[0].popis;
	btn2.label.text=xml.fotka[1].popis;
	btn3.label.htmlText=xml.fotka[2].popis;
	
	var loaderObr:Loader = new Loader();
	loaderObr.load(new URLRequest(xml.fotka[0].soubor));
	fotka_mc.addChild(loaderObr);
}


btn1.addEventListener(MouseEvent.CLICK,zobrazFotku);
btn2.addEventListener(MouseEvent.CLICK,zobrazFotku);
btn3.addEventListener(MouseEvent.CLICK,zobrazFotku);

function zobrazFotku(e:MouseEvent){
	//trace(e.currentTarget.name);
	fotka_mc.removeChildAt(0);
	var loaderObr:Loader = new Loader();
	loaderObr.load(new URLRequest(xml.fotka.(@id==e.currentTarget.name).soubor));
	fotka_mc.addChild(loaderObr);
}

Zdrojáky:

xml_zacatek.zip

xml - výsledné řešení

Počáteční stav - nahrávání fotek a swf do flexu:

xmlfotogalerie.zip

vyuka/xml.txt · Poslední úprava: 2008/12/18 10:34 autor: kofranek