Zpracování XML v Javě
Author
Albert FloresJazyk Java společně s XML tvoří symbiózu. Java je přenositelný jazyk a XML je přenositelný formát pro popis dat. Díky této symbióze v Javě existuje velká podpora zpracováni XML pomocí mnoha knihoven.
Nejčastější akce prováděné při zpracování XML jsou: * Načítaní XML elementu * Generování nových elementu nebo oprava stávajících * Zápis do XML dokumentu * Transformace XML do jiných formátů, například do HTML
Výše definované akce chceme nějakým způsobem zpracovat. Nejčastěji je zpracujeme pomoci parseru. +more Parsery se v nějaké podobě nacházejí v knihovnách každého moderního programovacího jazyka. V Javě od verze 1. 3 můžeme XML dokumenty zpracovávat pomocí dvou hlavních způsobů:.
* Přístup založený na proudovém zpracování * Přístup založený na stromové struktuře
Proudové zpracování
Princip proudového zpracování je založen na tom, že parser postupně čte XML dokument a pro každou ucelenou část vyvolá událost, kterou my zpracujeme námi implementovaným kódem. V Javě tento přístup je implementován pomoci knihovny SAX(Simple API for XML)
Výhody proudového zpracování
velice rychlé načítaní dokumentu * malá paměťová náročnost * jednoduché pro použiti * zpracování aktuální části dokumentu nezávisí na již zpracovaných částech * každá událost vyvolá korespondující metodu, kterou implementuje programátor
Nevýhody proudového zpracování
dokument je zpracováván sekvenčně, což znamená, že se nelze při čtení vracet zpět * princip obsluhy události představuje nízko úrovňové zpracování vyžadující množství doplňujícího kódu. * funkčnost je velice omezena - většinu musí implementovat programátor
Zpracování XML pomoci SAX
Neboli Simple Api for XML. Toto zpracování je definováno několika rozhraními v Java Core API popsané v balíku org. +morexml. sax. Každá XML značka je v aplikačním kódu reprezentovaná jako událost ,přičemž analyzátor čte XML dokument a generuje posloupnost událostí reprezentující dokument. Programátor píše kód, kterým zpracuje sérii událostí.
Níže lze vidět ukázka zpracování dat pomoci SAX
Hello, world!
SAX parser vygeneruje následující posloupnost události:
1.Start document
2.Start element: doc
3.Start element: pozdrav, attributes: barva (value: blue)
4.Characters: Hello, world!
5.End element: pozdrav
6.End element: doc
7.End document
Níže lze vidět hlavní kostru kódu zpracovávající XML pomoci SAX. Tento kód vytvoří objekt parseru, pomocí kterého můžeme dokument dále zpracovávat.
// Hlavni kod zpracovani XML pomoci SAX import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*;
public class VerifikatorJidloSAX { private static final String SOUBOR = "jidlo.xml";
public static void main(String [] args){ try { SAXParserFactory spf = SAXParserFactory. newInstance; spf. +moresetValidating(false); SAXParser saxLevel1 = spf. newSAXParser; XMLReader parser = saxLevel1. getXMLReader;.
parser. setErrorHandler(new ChybyZjisteneParserem); parser. +moresetContentHandler(new DefaultHandler); parser. parse(SOUBOR); System. out. println(SOUBOR + "precten bez chyb"); } catch(Exception e){ e. printStackTrace; } } }.
Zpracování parsovaného XML dokumentu
Zpracování dokumentu provedeme tak, že implementujeme z balíčku org. xml. +moresax několik rozhraní našimi třídami a tyto objekty předáme parseru pomoci jeho set metod. Mezi jeho nejpoužívanější rozhraní patří.
* ErrorHandler - Reakce na chyby * ContentHandler - rozhraní pro zpracování xml elementu * Attributes - Rozhraní pro zpracování xml atributů. Nejpouživanější metody jsou z rozhraní ContentHandler. +more * startDocument vykoná akci na začátku dokumentu * startElement tato metoda je volána při načtení počáteční značky konkrétní xml značky * characters vrací obsah elementu * endElement tato metoda se zavolá při načtení koncové značky.
Níže lze vidět ukázkovou implementaci kódu
public void startElement(String uri, String localName, String qName, Attributes atts){ if(qName.equals(JMENO_ELEMENTU)
true){ // zde zpracujeme obsah náš element }
Zpracování XML pomoci stromové reprezentace dokumentu == Toto zpracování dokumentu je založeno na tom, že se celý XML dokument načte najednou do pamětí a vytvoří se stromová struktura. V Javě lze s ním pracovat pomoci knihovny DOM(Document Object Model).
Výhody zpracování pomoci stromové struktury
celý dokument je najednou dostupný v pamětí * při zpracování dokumentu lze libovolně se vracet, přeskakovat a pohybovat se po stromu dokumentu * je možné nejen číst XML dokument ale i do něj zapisovat * dobrá spolupráce s dotazovacím jazykem XPath. * stejné rozhraní pro různé programovací jazyky (C++, Java, …. +more).
Nevýhody zpracování pomoci stromové struktury
malá rychlost načítaní vůči proudovém zpracování * veliká paměťová náročnost * API je hodně obecné a pro některá použiti zbytečně složité
Zpracování XML pomoci DOM
Neboli Document Object Model. Jedna se o standard připravený konsorciem W3C. +more Parser DOM načte celý XML dokument do paměti a vytvoří z něj stromovou objektovou reprezentaci. Níže je ukázka programu, který umožní vytvořit objekty, kterým přečte soubor jidlo. xml.
// Hlavni kod zpracovani XML pomoci DOM import javax.xml.parsers.*; import org.w3c.dom.*;
public class VerifikatorJidloDOM { private static final String SOUBOR = "jidlo.xml";
public static void main(String [] args){ try{ DocumentBuilderFactory dbf = DocumentBuilderFactory. newInstance; dbf. +moresetValidating(false); DocumentBuilder builder = dbf. newDocumentBuilder; builder. setErrorHandler(new ChybyZjisteneParserem); //nacteni dokumentu do pameti Document doc = builder. parse(SOUBOR); System. out. println(SOUBOR + "precten bez chyb"); } catch(Exception e){ e. printStackTrace; } } }.
Kód uvedený výše vytvoří DOM parser a načte XML dokument do pamětí pro další zpracování.
Literatura
Java a XML - Pavel Herout, nakladatelství Kopp, rok vydání 2007,
Reference
# [url=http://xml.apache.org/]Apache XML Project[/url] # [url=http://www.w3c.org/]World Wide Web Consortium[/url]