PB138cv/Cv3
Z FI WIKI
Přístup k XML
V zásadě buď stromově orientované API, nebo API založené na událostech
SAX (Simple API for XML)
- Sekvenční procházení souboru. Logické jednotky, které parser míjí, generují události (předávané programu).
<?xml version="1.0"?> <dokument> abc <znacka atr="hodnota">ef</znacka> </dokument>
postupně generuje události:
startDocument() startElement(): dokument characters(): abc startElement(): znacka [atts: atr=hodnota] characters(): ef endElement(): znacka endElement(): dokument endDocument()
- Implementace JAXP - v balíčcích org.xml.sax.*
- Základní třída - org.xml.sax.helpers.DefaultHandler - ta implementuje prázdné metody pro popis výše zmíněných událostí. Naše třída pak je odvozena od Default Handleru. Pokud chceme v programu pracovat se SAX, musí být naše nová programová třída odvozena od DefaultHandleru.
- Příkladový soubory zde či zde(saxCounter).
- Mimoto ale existují i události identifikující ignorovatelné bílé znaky (ignorableWhitespace()), instrukce zpracování (processingInstruction())...
DOM (Document Object Model)
- Ze XML strom (kořenový element je kořenem, jeho podelementy dětmi...)
- Každý element je uzel, uzlem je i textový obsah
- Atributy uloženy jako data u uzlů
- práce s celým dokumentem (export, skládání, ořezávání...)
- obecný standard (W3C)
- Implementace - JAXP (tutoriál a dokumentace).
- Použití DOM v JAXP...
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.w3c.dom.*; import org.w3c.dom.DOMException;
Následně vytvořit instanci DOM parseru
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder();
A zparsovat zadaný (např.) soubor.
Document document = builder.parse( new File("test.xml") );
V objektu Document je paměťová reprezentace XML.