Technologie XML je v rámci internetu, a nejen v něm, v poslední době čím dál tím rozšířenější. I když hlavní oblast zpracování dat z XML souborů je, a zřejmě i nadále bude, vyhrazena serverovým skriptům, můžeme k datům v externích XML souborech přistupovat i pomocí JavaScriptu.

Hlavním kamenem úrazu při zpracování XML dokumentů v JavaScriptu je jako obvykle silná nekompatibilita prohlížečů. Ne všechny prohlížeče podporují funkce potřebné pro zpracování XML. Veškeré dále popsané skripty byly testovány na u nás nejrozšířenější platformě Microsoft Internet Explorer, konkrétně na verzi 5.5. Dle tvrzení výrobce v dokumentaci by měly popsané funkce pracovat již od verze MSIE 4.

XML soubor

Pro účely ukázky uvažujme jednoduchý XML soubor s daty o rodině Novákových, jehož obsah vypadá nějak takto (soubor je na disku uložen pod názvem xmltest.xml):

<?xml version=“1.0″ encoding=“Windows-1252″ ?>
<rodina>
    <otec roknar=“1964″>Jan Novák</otec>
    <matka roknar=“1969″>Jana Nováková</matka>
    <deti>
        <dite pohlavi=“M“ roknar=“1993″>Petr Novák</dite>
        <dite pohlavi=“M“ roknar=“1995″>Michal Novák</dite>
        <dite pohlavi=“Z“ roknar=“1998″>Adéla Nováková</dite>
    </deti>
</rodina>

Otevření XML souboru

K otevření souboru slouží několik následujících řádků kódu:

function verifyfunc() {
    if (xmlDoc.readyState != 4) {
        return false;
    }
}
var xmlDoc = new ActiveXObject(„Microsoft.XMLDOM“);
xmlDoc.async=“false“;
xmlDoc.onreadystatechange=verifyfunc;
xmlDoc.load(‚xmltest.xml‘);
var xmlObj=xmlDoc.documentElement;

V uvedeném kódu jsme především vytvořili ActiveX objekt uvedené třídy, který slouží jako jakási „brána“ k XML funkcím. Metod a funkcí objektu XMLDOM je celá řada a jejich popis by byl nad rámec tohoto článku (případné zájemce odkazuji například na kvalitně zpracovaný referenční přehled na http://www.devguru.com). Pro inicializaci jsme použili jen nezbytné minimum metod a vlastností:

  • Nastavení vlastnosti async na false zabezpečí, že provádění dalšího kódu (po započetí nahrávání) bude pokračovat až po úplném nahrání XML souboru, a nedojde tedy k práci s neinicializovaným objektem.
  • Vlastností onreadystatechange nastavujeme handler pro událost změny stavu nahrávání XML souboru; protože nahráváme synchronně, jedná se víceméně o formální zajištění.
  • Metoda load provede vlastní nahrání XML souboru.
  • Nakonec s využitím vlastnosti documentElement získáme výchozí „uzel“ celého XML dokumentu – objekt s rozhraním typu Element.

Čtení XML dokumentu

XML dokumenty jsou organizovány ve stromové struktuře. Ke zpřístupnění jednotlivých větví a uzlů stromu slouží rozhraní Element, obsahující celou řadu metod a vlastností, které zpřístupní jednak parametry samotného uzlu, jednak jeho „předchůdce“ a „následníky“. Zájemce o podrobný popis bych opět odkázal na výše uvedený zdroj, pro základní čtení XML dokumentu nicméně vystačíme se dvěma až třemi základními postupy, jež jsou dostatečně zřejmé z následující ukázky kódu. Tato ukázka čte údaje o složení rodiny z výše uvedeného XML dokumentu a zobrazuje je v alert okně:

function WriteXML() {
    var t= „Otec: “ + xmlObj.childNodes(0).text + “ (narozen “ + xmlObj.childNodes(0).getAttribute(„roknar“) + „)\n“
    t += „Matka: “ + xmlObj.childNodes(1).text + “ (narozena “ + xmlObj.childNodes(1).getAttribute(„roknar“) + „)\n\n“
    t += „Děti:\n“
    var i;
    for(i=0; i<xmlObj.childNodes(2).childNodes.length; i++ ) {
        t += “ “ + xmlObj.childNodes(2).childNodes(i).text + “ (narozen “ + xmlObj.childNodes(2).childNodes(i).getAttribute(„roknar“) + „)\n“
    }
    alert(t);
}

Uvedený skript můžete vidět při práci.

XML je podle vyjádření mnohých perspektivní technologií, jejíž hlavní výhodou je relativně snadná přenositelnost dat mezi datovými zdroji i platformami. Budete-li mít zájem, můžeme si v dalších článcích na toto téma ukázat, třeba opět prostřednictvím JavaScriptu, další XML funkce, případně také řešení konkrétních aplikací, o něž budete mít zájem.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět