Maison  >  Article  >  développement back-end  >  Tutoriel Java et XML (4) Utilisation de DOM pour générer des fichiers XML

Tutoriel Java et XML (4) Utilisation de DOM pour générer des fichiers XML

黄舟
黄舟original
2017-02-22 14:36:061920parcourir

Dans le didacticiel précédent, nous avons appris à utiliser la méthode d'analyse DOM pour lire et modifier le contenu des fichiers XML. Aujourd'hui, nous allons apprendre à utiliser le mécanisme d'analyse DOM pour générer des fichiers XML.

Voici nos exigences spécifiques pour le fichier XML à générer :
1. L'élément du nœud racine est « Employés » et l'espace de noms est « http://www.php.cn. /" , le nœud racine contient une série d’éléments Employee.
2. Les informations sur les employés sont représentées par le nœud Employé et le fichier XML généré contient deux informations sur les employés.
3. Chaque employé possède un attribut "id".
4. L'élément Employé comporte quatre sous-éléments : "nom", "âge", "rôle", "sexe".
Voici le code du programme :

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

}

Il convient de noter que deux objets StreamResult sont créés dans le code, l'un consiste à afficher le contenu du fichier XML sur la console à des fins de débogage, et l'autre autre est de Le contenu est écrit dans le fichier.
Le contenu XML généré par le programme :

<?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>

Le contenu XML n'est pas formaté. Si vous devez formater correctement le contenu XML, reportez-vous à cet article Formatage XML en Java

Dans le didacticiel précédent, nous avons appris à utiliser la méthode d'analyse DOM pour lire et modifier le contenu des fichiers XML. Aujourd'hui, nous allons apprendre à utiliser le mécanisme d'analyse DOM pour générer des fichiers XML.

Voici nos exigences spécifiques pour le fichier XML à générer :
1. L'élément du nœud racine est « Employés », l'espace de noms est « http://www.php.cn/ » et la racine. Le nœud contient une série d’éléments Employee.
2. Les informations sur les employés sont représentées par le nœud Employé et le fichier XML généré contient deux informations sur les employés.
3. Chaque employé possède un attribut "id".
4. L'élément Employé comporte quatre sous-éléments : "nom", "âge", "rôle", "sexe".
Voici le code du programme :

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

}
Il convient de noter que deux objets StreamResult sont créés dans le code, l'un consiste à afficher le contenu du fichier XML sur la console à des fins de débogage, et l'autre autre est de Le contenu est écrit dans le fichier.

Contenu XML généré par le programme :

<?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>
Ce qui précède est le contenu du didacticiel Java&Xml (4) utilisant la méthode DOM pour générer des fichiers XML. Pour plus de contenu connexe, veuillez faire attention au chinois PHP. site Internet (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn