>백엔드 개발 >XML/RSS 튜토리얼 >Java&Xml 자습서(4) DOM을 사용하여 XML 파일 생성

Java&Xml 자습서(4) DOM을 사용하여 XML 파일 생성

黄舟
黄舟원래의
2017-02-22 14:36:061956검색

이전 튜토리얼에서는 DOM 구문 분석 방법을 사용하여 XML 파일의 내용을 읽고 수정하는 방법을 배웠습니다. 오늘은 DOM 구문 분석 메커니즘을 사용하여 XML 파일을 생성하는 방법을 알아봅니다.

다음은 생성할 XML 파일에 대한 특정 요구 사항입니다.
1. 루트 노드 요소는 "Employees"이고 네임스페이스는 "http://www.php.cn"입니다. /" , 루트 노드에는 일련의 Employee 요소가 포함되어 있습니다.
2. 직원 정보는 Employee 노드로 표현되며 생성된 XML 파일에는 두 가지 직원 정보가 있습니다.
3. 각 직원은 "id" 속성을 갖습니다.
4. Employee 요소에는 "이름", "나이", "역할", "성별"이라는 4개의 하위 요소가 있습니다.
다음은 프로그램 코드입니다.

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

}

코드에는 두 개의 StreamResult 객체가 생성되는데, 하나는 디버깅 목적으로 XML 파일 내용을 콘솔에 출력하는 것이고, 다른 하나는 XML 내용을 파일에 기록합니다.
프로그램에서 출력되는 XML 콘텐츠:

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

XML 콘텐츠의 형식이 지정되지 않았습니다. XML 콘텐츠의 형식을 올바르게 지정해야 하는 경우 Java에서 XML 형식 지정

문서를 참조하세요. 이전 튜토리얼에서는 DOM 구문 분석을 사용하여 XML 파일의 내용을 읽고 수정하는 방법을 배웠습니다. 오늘은 DOM 구문 분석 메커니즘을 사용하여 XML 파일을 생성하는 방법을 배웁니다.
다음은 생성할 XML 파일에 대한 구체적인 요구 사항입니다.
1. 루트 노드 요소는 "Employees"이고 네임스페이스는 "http://www.php.cn/"이며 루트는 노드에는 일련의 Employee 요소가 포함되어 있습니다.
2. 직원 정보는 Employee 노드로 표현되며 생성된 XML 파일에는 두 가지 직원 정보가 있습니다.
3. 각 직원은 "id" 속성을 갖습니다.
4. Employee 요소에는 "이름", "나이", "역할", "성별"이라는 4개의 하위 요소가 있습니다.
다음은 프로그램 코드입니다.

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

}

코드에는 두 개의 StreamResult 객체가 생성되는데, 하나는 디버깅 목적으로 XML 파일 내용을 콘솔에 출력하는 것이고, 다른 하나는 XML 내용을 파일에 기록합니다.
프로그램에서 출력되는 XML 컨텐츠:

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

위는 DOM 메소드를 사용하여 XML 파일을 생성하는 Java&Xml 튜토리얼(4)의 컨텐츠입니다. 더 많은 관련 컨텐츠를 보려면 PHP 중국어 웹사이트를 참고하세요. (www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.