XML adatkezelés A DOM alapú adatkezelés Dr. Kovács László Répási Tibor kiegészítéseivel
DOM Az XML jellegű dokumentumok feldolgozó felülete DOM = Document Object Model Az értelmező előállít egy olyan objektumot, amely az XML dokumentumot tartalmazza. A kezelő ezen objektum tulajdonságain, metódusain keresztül tud dokumentumkezelést végezni XML SAX dokumentum objektum modell Kezelő program DOM feldolgozó K.L.
DOM Fontosabb lépések: - dokumentum olvasó létrehozása - objektum (fa) létrehozása - dokumentum tagelemek elérése - dokumentum metódusok meghívása - dokumentum szerializálása A DOM a dokumentum fa modelljét építi fel a memóriában A dokumentum elemeit objektumok reprezentálják. Az elemek egymásbaágyazásának viszonyait az objektumok közti szülő-gyermek viszony reprezentálja.
DOM A DOM osztály-kapcsolat modellje Document Documentfragment Node Element Attribute Entity CharacterData PI Text Comment
DOM osztályai <?xml version="1.0"?> <!-- mintapélda --> <konyvek xmlns="www.lib.org/books"> <konyv id="1001"> <cim> Tornado a godorben </cim> <ibook:isbn xmlns:ibook="www.book.org/codes"> 1156511-568-89 </ibook:isbn> <ar pnem="ft"> 2455 </ar> <benn/> <kiado idref="k354" /> <szerzo> Kiss Péter </szerzo> <szerzo> Kovacs Lajos </szerzo> </konyv> </konyvek>
DOM kezelő osztályai Navigációs logikán alapszik parent child sibling A fa bővithető, elemei törölhetők
DOM Dokumentum olvasó létrehozása Document DocumentBuilder DocumentBuilderFactory DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance() dbf.setvalidating(true); DocumentBuilder db = dbf.newdocumentbuilder(); Document dom = db.parse (new File(args)); kezelo(dom);
DOM A dokumentum osztály legfontosabb elemei createelement(string) createattribute(string) createcomment(string) createtextnode(string) createentityreference(string) getdocumenturi() getdocumentelement() getelementsbytagname() insertbefore (Node, Node) getxmlversion() normalize()
DOM A Node osztály legfontosabb elemei appendchild(node) clonenode() getattributes() getchildnodes() getfirstchild() getlocalname() getnamespaceiuri() getnextsibling() getnodetype() getnodevalue() getparentnode() getprefix() getprevioussibling() gettextcontent() haschildnodes() hasattributes() removechild() replacechild() settextcontent() setprefix() TEXT_NODE ATTRIBUTE_NODE
Dokumentum nyitása import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.parserconfigurationexception; import org.w3c.dom.*; import org.xml.sax.saxexception; main() { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newdocumentbuilder(); Document dom = db.parse(new File(args)); query1(dom); }catch(parserconfigurationexception pce) { } catch(saxexception se) { } catch(ioexception ioe) { }
Dokumentum gyökérelem elérése: Document dok; Node root = dok.getdocumentelement(); Gyerekelemek bejárása Node elem, gyerek; for (p=0; p<elem.getchildnodes().getlength(); p++) { gyerek = elem.getchildnodes().item(p); } Elem nevének és tipusának lekérdezése: Node elem; if (elem.getnodetype()==node.element_node) { if (elem.getnodename().compareto("ar") == 0) {
Elemjellemzők bejárása Node elem; for (p=0; p<elem.getattributes().getlength();p++) { Node elemuj = elem.getattributes().item(p); } Szövegérték növelése Node elem; ear = Integer.parseInt(elem.getTextContent()); String ujszov = String.valueOf(ear+nov); elem.setnodevalue(ujszov);
Új elem felvitele Document dok; Node ujelem, elem; Node ujelem = dok.createelement("konyv"); elem.appendchild(ujelem); ujelem.settextcontent("babits"); Elem törlése Node elem, gyerek; for (p=0; p<elem.getchildnodes().getlength(); p++) { gyerek = elem.getchildnodes().item(p); elem.removechild(gyerek); }