XML adatkezelés I. Az szabvány Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék XML adatok kezelési lehetőségei szövegszerkesztő API XML DOM API XSL XQUERY Az XML dokumentumok feldolgozó felülete = Simple API for XML Az értelmező szekvenciálisan feldolgozza az XML dokumentumot, s minden fontosabb eseményről értesíti a kezelő programot callback mechanizmussal XML feldolgozó startelement Kezelő program endelement
A feldolgozó biztosít egy osztálykönyvtárt, melyen keresztül lehet definiálni és elérhetővé tenni a callback kezelő függvényeket. Java minta környezet Fontosabb lépések: - dokumentum olvasó létrehozása - tartalomkezelő keret létrehozása - az eseménykezelő metódusok létrehozása - hibakezelő metódusok létrehozása <orszagok> <orszag kod="i2"> Alma </orszag> <orszag kod="i2"> Korte </orszag> </orszagok> XML element attribute text Esemény kezelők Esemény érzékelő feldolgozó kapcsolódási felületei: -Parser - DocumentHandler - AttributeList - ErrorHandler - Entity Resolver - Locator - DTDHandler Parser XML Kliens ContentHandler Element Text DocumentHandler AttributeList Entity Resolver
Dokumentum olvasó létrehozása import org.xml.sax.xmlreader; import org.apache.xerces.parsers.parser ;.. public class ERT { public void kezelo(string URI) { XMLReader parser = new Parser();.. public static void main(string[] args) { ERT pdemo = new ERT(); pdemo.kezelo( uri ); Dokumentum értelmezési folyamatának elindítása import org.xml.sax.exception;.. public void kezelo(string URI) { try { XMLReader parser = new Parser(); parser.parse(); catch (Exception e) { Tartalom kezelő keret létrehozása import org.xml.sax.attributes; import org.xml.sax.contenthandler; import org.xml.sax.locator; Class Skezelo implements ContentHandler{ kezelo metodusok public void kezelo(string URI) { XMLReader parser = new Parser(); Skezelo Shand = new Skezelo(); parser.setcontenthandler(shand); parser.parse(uri);
Esemény kezelő metódusok létrehozása Class Skezelo implements ContentHandler{ public void startdocument() { throws Exception (); public void enddocument() { throws Exception (); public void startelement() { throws Exception (); Esemény kezelő metódusok létrehozása - dokumentumban aktuális pozíció - dokumentum kezdete - dokumentum vége - elem kezdete - elem vége - prefix feldolgozás - karakter rész elérés - entity rész - direktivák -névterek - attributumok void startelement(string name, AttributeList atts) Esemény helyének lekérdezése public void setdocumentlocator (Locator loc) { Minden eseménykor meghívódik, megadva az aktuális Locator elemet
Dokumentum kezdetének és végének eseménye public void startdocument () throws Exception{ public void enddocument () throws Exception{ Feldolgozási utasítás eseménye: public void processinginstruction (String feldolgozo, String adat) throws Exception{ Névtér definíció kezdete: public void startprefixmapping (String alias, String névter) throws Exception{ Névtér definíció vége: public void endprefixmapping (String alias) throws Exception{ Elem kezdete: public void startelement (String névtér, String lokálisnév, String teljesnév, Attributes elemjellemzők) throws Exception{ Elem vége: public void endelement (String névtér, String lokálisnév, String teljesnév) throws Exception{
Karakterek észlelése: public void characters (char[] karakterlánc, int kezdőpozíció, int végpozíció) throws Exception{ Átugrott egyedek: public void skippedentity (String név) throws Exception{ mintapélda public static void main(string[] args) { xmlfo xmlfo = new xmlfo(); XML doksi = new XML(); doksi.kezelo("c:\\jdeveloper\\proba1.xml"); import org.xml.sax.exception; import org.xml.sax.xmlreader; public class XML { public void kezelo(string args) { try { XMLReader parser = new Parser(); Skezelo Shand = new Skezelo(); parser.setcontenthandler(shand); parser.parse(args); catch (Exception e) { System.out.println(e.getMessage()); catch (IOException e) { System.out.println(e.getMessage());
import org.xml.sax.attributes; import org.xml.sax.contenthandler; import org.xml.sax.locator; import org.xml.sax.exception; public class Skezelo implements ContentHandler { private Locator loc; public Skezelo() { public void setdocumentlocator (Locator lloc) { this.loc = lloc; public void startdocument() throws Exception { System.out.println("dok. kezdet"); public void enddocument() throws Exception { System.out.println("dok. veg"); public void startprefixmapping(string prefix, String uri) throws Exception { System.out.println("prefix:" + prefix +" : " + uri); public void endprefixmapping(string prefix) throws Exception { System.out.println("prefix vege:" + prefix); public void processinginstruction (String target, String data) throws Exception { System.out.println("Feld. utasitas:" + target); public void startelement (String namespaceuri, String localname, String rawname, Attributes atts) throws Exception { System.out.println ("elemkezdet:"+localname); for (int i=0; i<atts.getlength(); i++ ){ System.out.println(atts.getLocalName(i)+":"+atts.getValue(i));
public void endelement (String namespaceuri, String localname, String rawname) throws Exception { System.out.println("elem vege:"+ localname); public void characters (char[] ch, int start, int length) throws Exception { String ered = new String(); for (int i=start; i<start+length;i++) { ered += ch[i]; System.out.println(ered);