[[oktatas:programozás:java|< Java]] ====== Java XML ====== * **Szerző:** Sallai András * Copyright (c) 2009, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== DOM XML ===== DOM azaz Dokumentum Objektum Model A DOM egy platform- és nyelvfüggetlen felület, amely alapvető módja az XML fájlok elérésének, manipulálásának. A DOM modell segítségével egy fastruktúra csomópontjaiként érhetjük el a dokumentumot. A fa szerkezeten képesek vagyunk programból navigálni és bármely elemet megváltoztatni vagy törölni. Az alapvető programozási felületet a World Wide Web Consortium (W3C) alkotta meg. ==== Üres dokumentum készítése ==== import org.w3c.dom.*; import javax.xml.parsers.*; class ap { public static void main(String[] args) throws Exception { System.out.println("XML dok készítés"); DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder dokepito = gyar.newDocumentBuilder(); Document dok = dokepito.newDocument(); } /* main */ } /* fő osztály */ ==== XML fájl készítése ==== import org.w3c.dom.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; class ap { public static void main(String[] args) throws Exception { System.out.println("XML dok készítés"); DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder elemzo = gyar.newDocumentBuilder(); Document dok = elemzo.newDocument(); Element gyoker = dok.createElement("root"); dok.appendChild(gyoker); Comment megjegyzes = dok.createComment("Megjegyzés"); gyoker.appendChild(megjegyzes); Element gyermekElem = dok.createElement("Child"); gyermekElem.setAttribute("tulajdonsag", "érték1"); gyoker.appendChild(gyermekElem); TransformerFactory tranGyar = TransformerFactory.newInstance(); Transformer aTransformer = tranGyar.newTransformer(); Source src = new DOMSource(dok); Result dest = new StreamResult(System.out); aTransformer.transform(src, dest); } /* main */ } /* fő osztály */ ==== Gyökér elem kiolvasása ==== 001 Nagy Géza geza@val.hu 002 Ár Aladár aladar@val.hu 003 Bar Mária mari@val.hu import org.w3c.dom.*; import javax.xml.parsers.*; public class ap { public static void main(String[] args) throws Exception { DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder dokepito = gyar.newDocumentBuilder(); Document dok = dokepito.parse("dolgozo.xml"); Node csomopont = dok.getDocumentElement(); String gyoker = csomopont.getNodeName(); System.out.println("A gyökér neve: " + gyoker); } /* main */ } /* Fő osztály*/ ==== Gyökér elem kiolvasása 2 ==== import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*; public class ap { public static void main(String[] args) throws Exception { File f = new File("dolgozo.xml"); if (f.exists()){ DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder dokepito = gyar.newDocumentBuilder(); Document dok = dokepito.parse(f); Az f objektumot megint felhasználjuk Node csomopont = dok.getDocumentElement(); String gyoker = csomopont.getNodeName(); System.out.println("A gyökér neve: " + gyoker); } else { System.out.println("A fájl nem létezik"); } } /* main */ } /* Fő osztály*/ Mint az előbb, csak ellenőrizzük a fájl létezését. A kész fájl objektumot felhasználhatjuk a dokumentum objektum készítésénél. ==== XML elem megszámolása ==== import org.w3c.dom.*; import javax.xml.parsers.*; public class ap { public static void main(String[] args) throws Exception { DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder dokepito = gyar.newDocumentBuilder(); Document dok = dokepito.parse("dolgozo.xml"); NodeList csomopontok = dok.getElementsByTagName("dolgozo"); System.out.println("Elemek száma: " + csomopontok.getLength()); } /* main */ } /* Fő osztály */ ==== XML elem megszámolása ellenőrzéssel ==== import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*; public class ap { public static void main(String[] args) throws Exception { File f = new File("dolgozo.xml"); DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder dokepito = gyar.newDocumentBuilder(); Document dok = dokepito.parse("dolgozo.xml"); NodeList csomopontok = dok.getElementsByTagName("dolgozo"); if (csomopontok.getLength() == 0) System.out.println("Nincs elem a dokumentumban"); else System.out.println("Elemek száma: " + csomopontok.getLength()); } /* main */ } /* Fő osztály */ ==== XML előállítása ==== import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; public class ap { public static void main(String[] args) throws Exception { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader bf = new BufferedReader(isr); System.out.print("Gyökér elem: "); String gyoker = bf.readLine(); File f = new File("dolgozo.xml"); DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder dokepito = gyar.newDocumentBuilder(); Document dok = dokepito.newDocument(); Element gyokerElem = dok.createElement(gyoker); dok.appendChild(gyokerElem); String elem, adat; do { System.out.print("Elem: "); elem = bf.readLine(); if (!elem.equals("")) { System.out.print("Adat: "); adat = bf.readLine(); Element em = dok.createElement(elem); em.appendChild(dok.createTextNode(adat)); gyokerElem.appendChild(em); } }while (!elem.equals("")); TransformerFactory transGyar = TransformerFactory.newInstance(); Transformer trans = transGyar.newTransformer(); trans.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource forras = new DOMSource(dok); StreamResult result = new StreamResult(System.out); trans.transform(forras, result); } /* main */ } /* Fő osztály */ ==== Összes XML elem olvasása ==== import org.w3c.dom.*; import javax.xml.parsers.*; public class ap { public static void main(String[] args) throws Exception { DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder dokepito = gyar.newDocumentBuilder(); Document dok = dokepito.parse("dolgozo.xml"); NodeList csomopontok = dok.getElementsByTagName("*"); System.out.println("Elemek: "); for (int i = 0; i < csomopontok.getLength(); i++) { Element elem = (Element) csomopontok.item(i); System.out.println(elem.getNodeName()); } } /* main */ } /* Fő osztály vége */ ==== Adott elem tartalmának olvasása ==== import org.w3c.dom.*; import javax.xml.parsers.*; public class ap { public static void main(String[] args) throws Exception { DocumentBuilderFactory gyar = DocumentBuilderFactory.newInstance(); DocumentBuilder dokepito = gyar.newDocumentBuilder(); Document dok = dokepito.parse("dolgozo.xml"); NodeList csomopontok = dok.getElementsByTagName("nev"); System.out.println("Elemek tartalma: "); for (int i = 0; i < csomopontok.getLength(); i++) { Element elem = (Element) csomopontok.item(i); System.out.println(elem.getTextContent()); } } /* main */ } /* Főoldal */ ==== XML írása metódusokra bontva ==== Az elkészítendő dokumentum: Nagy Mihály Szolnok 845000 Forrás: import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Element; import javax.xml.transform.TransformerFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.TransformerException; import javax.xml.transform.OutputKeys; class Program02 { private static Document buildDoc() { Document doc = null; try { doc = tryBuildDoc(); }catch(ParserConfigurationException ex) { System.err.println("Hiba a dokumentum létrehozása során!"); } return doc; } private static Document tryBuildDoc() throws ParserConfigurationException{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); return doc; } private static void createXml(Document doc) { Element root = doc.createElement("vallalat"); doc.appendChild(root); Element dolgozo = doc.createElement("dolgozo"); root.appendChild(dolgozo); Attr attr = doc.createAttribute("id"); attr.setValue("1"); dolgozo.setAttributeNode(attr); Element nev = doc.createElement("nev"); nev.appendChild(doc.createTextNode("Nagy Mihály")); dolgozo.appendChild(nev); Element telepules = doc.createElement("telepules"); telepules.appendChild(doc.createTextNode("Szolnok")); dolgozo.appendChild(telepules); Element fizetes = doc.createElement("fizetes"); fizetes.appendChild(doc.createTextNode("845000")); dolgozo.appendChild(fizetes); } private static void writeXml(Document doc) { try { tryWriteXml(doc); }catch(TransformerConfigurationException ex) { System.err.println("Hiba az XML létrehozása során!"); }catch(TransformerException ex) { System.err.println("Hiba az átalakítás során!"); } } private static void tryWriteXml(Document doc) throws TransformerConfigurationException, TransformerException { TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult("vallalat.xml"); //~ StreamResult result = new StreamResult(System.out); t.setOutputProperty(OutputKeys.INDENT, "yes"); t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); t.transform(source, result); } public static void main(String[] args) { Document doc = buildDoc(); createXml(doc); writeXml(doc); System.out.println("A xml fájl készítés vége."); } } ==== XML olvasása ==== Nagy János Szolnok 845000 Telepes Péter Szeged 852000 import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import java.io.IOException; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Element; class Program03 { private static Document buildDoc() { Document doc = null; try { doc = tryBuildDoc(); }catch(ParserConfigurationException ex) { System.err.println("Hiba a dokumentum létrehozása során!"); }catch(SAXException ex) { System.err.println("Hiba értelmezés során!"); }catch(IOException ex) { System.err.println("Hiba a fájl elérése során!"); } return doc; } private static Document tryBuildDoc() throws ParserConfigurationException, SAXException, IOException { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("dolgozok.xml"); //opcionális, de ajánlott: doc.getDocumentElement().normalize(); return doc; } private static void writeXml(Document doc) { String root = doc.getDocumentElement().getNodeName(); NodeList nodeList = doc.getElementsByTagName("dolgozo"); for(int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); System.out.println("Aktuális elem: " + node.getNodeName()); if( node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; String az = element.getAttribute("id"); String nev = element.getElementsByTagName("nev").item(0).getTextContent(); String telepules = element.getElementsByTagName("telepules").item(0).getTextContent(); String fizetes = element.getElementsByTagName("fizetes").item(0).getTextContent(); System.out.printf("%s:%s:%s:%s\n", az, nev, telepules, fizetes); } } } public static void main(String[] args) { Document doc = buildDoc(); writeXml(doc); } }