Heim  >  Artikel  >  Backend-Entwicklung  >  Java&Xml-Tutorial (4) Verwenden von DOM zum Generieren von XML-Dateien

Java&Xml-Tutorial (4) Verwenden von DOM zum Generieren von XML-Dateien

黄舟
黄舟Original
2017-02-22 14:36:061920Durchsuche

Im vorherigen Tutorial haben wir gelernt, die DOM-Parsing-Methode zum Lesen und Ändern des Inhalts von XML-Dateien zu verwenden. Heute lernen wir, wie man den DOM-Parsing-Mechanismus zum Generieren von XML-Dateien verwendet.

Das Folgende sind unsere spezifischen Anforderungen an die zu generierende XML-Datei:
1. Das Wurzelknotenelement ist „Employees“ und der Namespace ist „http://www.php.cn“. /" enthält der Wurzelknoten eine Reihe von Employee-Elementen.
2. Mitarbeiterinformationen werden durch den Mitarbeiterknoten dargestellt, und die generierte XML-Datei enthält zwei Mitarbeiterinformationen.
3. Jeder Mitarbeiter hat ein „id“-Attribut.
4. Das Employee-Element hat vier Unterelemente – „Name“, „Alter“, „Rolle“, „Geschlecht“.
Das Folgende ist der Programmcode:

package com.journaldev.xml;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class XMLWriterDOM {

    public static void main(String[] args) {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.newDocument();
            //add elements to Document
            Element rootElement =
                doc.createElementNS("http://www.journaldev.com/employee", "Employees");
            //append root element to document
            doc.appendChild(rootElement);

            //append first child element to root element
            rootElement.appendChild(getEmployee(doc, "1", "Pankaj", "29", "Java Developer", "Male"));

            //append second child
            rootElement.appendChild(getEmployee(doc, "2", "Lisa", "35", "Manager", "Female"));

            //for output to file, console
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            //for pretty print
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            DOMSource source = new DOMSource(doc);

            //write to console or file
            StreamResult console = new StreamResult(System.out);
            StreamResult file = new StreamResult(new File("/Users/pankaj/emps.xml"));

            //write data
            transformer.transform(source, console);
            transformer.transform(source, file);
            System.out.println("DONE");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private static Node getEmployee(Document doc, String id, String name, String age, String role,
            String gender) {
        Element employee = doc.createElement("Employee");

        //set id attribute
        employee.setAttribute("id", id);

        //create name element
        employee.appendChild(getEmployeeElements(doc, employee, "name", name));

        //create age element
        employee.appendChild(getEmployeeElements(doc, employee, "age", age));

        //create role element
        employee.appendChild(getEmployeeElements(doc, employee, "role", role));

        //create gender element
        employee.appendChild(getEmployeeElements(doc, employee, "gender", gender));

        return employee;
    }


    //utility method to create text node
    private static Node getEmployeeElements(Document doc, Element element, String name, String value) {
        Element node = doc.createElement(name);
        node.appendChild(doc.createTextNode(value));
        return node;
    }

}

Es ist zu beachten, dass im Code zwei StreamResult-Objekte erstellt werden. Eines dient dazu, den Inhalt der XML-Datei zu Debugging-Zwecken an die Konsole auszugeben. und der andere ist, den Inhalt in die Datei zu schreiben.
Der vom Programm ausgegebene XML-Inhalt:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Employees xmlns=" 
<Employee id="1"><name>Pankaj</name><age>29</age><role>Java Developer</role><gender>Male</gender></Employee>
<Employee id="2"><name>Lisa</name><age>35</age><role>Manager</role><gender>Female</gender></Employee></Employees>

Der XML-Inhalt ist nicht formatiert. Wenn Sie den XML-Inhalt richtig formatieren müssen, lesen Sie diesen Artikel Formatieren von XML in Java

Im vorherigen Tutorial haben wir gelernt, die DOM-Analyse zum Lesen und Ändern des Inhalts von XML-Dateien zu verwenden. Heute lernen wir, wie man den DOM-Analysemechanismus zum Generieren von XML-Dateien verwendet.
Das Folgende sind unsere spezifischen Anforderungen an die zu generierende XML-Datei:
1. Das Wurzelknotenelement ist „Mitarbeiter“, der Namespace ist „http://www.php.cn/“ und der Stamm Der Knoten enthält eine Reihe von Employee-Elementen.
2. Mitarbeiterinformationen werden durch den Mitarbeiterknoten dargestellt, und die generierte XML-Datei enthält zwei Mitarbeiterinformationen.
3. Jeder Mitarbeiter hat ein „id“-Attribut.
4. Das Employee-Element hat vier Unterelemente – „Name“, „Alter“, „Rolle“, „Geschlecht“.
Das Folgende ist der Programmcode:

package com.journaldev.xml;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class XMLWriterDOM {

    public static void main(String[] args) {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.newDocument();
            //add elements to Document
            Element rootElement =
                doc.createElementNS("http://www.journaldev.com/employee", "Employees");
            //append root element to document
            doc.appendChild(rootElement);

            //append first child element to root element
            rootElement.appendChild(getEmployee(doc, "1", "Pankaj", "29", "Java Developer", "Male"));

            //append second child
            rootElement.appendChild(getEmployee(doc, "2", "Lisa", "35", "Manager", "Female"));

            //for output to file, console
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            //for pretty print
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            DOMSource source = new DOMSource(doc);

            //write to console or file
            StreamResult console = new StreamResult(System.out);
            StreamResult file = new StreamResult(new File("/Users/pankaj/emps.xml"));

            //write data
            transformer.transform(source, console);
            transformer.transform(source, file);
            System.out.println("DONE");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private static Node getEmployee(Document doc, String id, String name, String age, String role,
            String gender) {
        Element employee = doc.createElement("Employee");

        //set id attribute
        employee.setAttribute("id", id);

        //create name element
        employee.appendChild(getEmployeeElements(doc, employee, "name", name));

        //create age element
        employee.appendChild(getEmployeeElements(doc, employee, "age", age));

        //create role element
        employee.appendChild(getEmployeeElements(doc, employee, "role", role));

        //create gender element
        employee.appendChild(getEmployeeElements(doc, employee, "gender", gender));

        return employee;
    }


    //utility method to create text node
    private static Node getEmployeeElements(Document doc, Element element, String name, String value) {
        Element node = doc.createElement(name);
        node.appendChild(doc.createTextNode(value));
        return node;
    }

}

Es ist zu beachten, dass im Code zwei StreamResult-Objekte erstellt werden. Eines dient dazu, den Inhalt der XML-Datei zu Debugging-Zwecken an die Konsole auszugeben. und der andere ist, den Inhalt in die Datei zu schreiben.
XML-Inhaltsausgabe durch das Programm:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Employees xmlns=" 
<Employee id="1"><name>Pankaj</name><age>29</age><role>Java Developer</role><gender>Male</gender></Employee>
<Employee id="2"><name>Lisa</name><age>35</age><role>Manager</role><gender>Female</gender></Employee></Employees>

Das Obige ist der Inhalt des Java&Xml-Tutorials (4) unter Verwendung der DOM-Methode zum Generieren von XML-Dateien. Für weitere verwandte Inhalte achten Sie bitte auf PHP-Chinesisch Website (www.php.cn) !


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn