[[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);
}
}