Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_xml

< Java

Java XML

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

<?xml version="1.0"?>
<dolgozok>
    <dolgozo>
        <id>001</id>
        <nev>Nagy Géza</nev>
        <email>geza@val.hu</email>
    </dolgozo>
    <dolgozo>
        <id>002</id>
        <nev>Ár Aladár</nev>
        <email>aladar@val.hu</email>
    </dolgozo>
   <dolgozo>
        <id>003</id>
        <nev>Bar Mária</nev>
        <email>mari@val.hu</email>
   </dolgozo>
</dolgozok>
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:

vallalat.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<vallalat>
  <dolgozo id="1">
    <nev>Nagy Mihály</nev>
    <telepules>Szolnok</telepules>
    <fizetes>845000</fizetes>
  </dolgozo>
</vallalat>

Forrás:

Program01.java
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

vallalat.xml
<?xml version="1.0"?>
<vallalat>
	<dolgozo id="1">
		<nev>Nagy János</nev>
		<telepules>Szolnok</telepules>
		<fizetes>845000</fizetes>
	</dolgozo>
	<dolgozo id="2">
		<nev>Telepes Péter</nev>
		<telepules>Szeged</telepules>
		<fizetes>852000</fizetes>
	</dolgozo>
</vallalat>
Program01.java
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);
	}
}
oktatas/programozas/java/java_xml.txt · Utolsó módosítás: 2023/09/11 09:08 szerkesztette: admin