PB138cv/Cv3

Z FI WIKI
Přejít na: navigace, hledání

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.