如何用Java(DOM Parser)编写XML文件
时间:2020-02-23 14:36:15 来源:igfitidea点击:
之前我们学习了如何使用DOM分析器读取XML文件以及如何在Java中编辑XML文件,今天我们将学习如何使用DOM分析器用Java语言编写XML文件。
这是我们XML文件的要求。
根元素将是名称空间为" https://www.theitroad.local/employee"的"雇员"。
该根元素将包含员工列表。员工信息将写在"员工"元素中。
XML文件中将有两个员工信息。每个员工都有一个名为" id"的属性
雇员元素将具有四个元素-"姓名","年龄","角色","性别"。
这是上述要求的Java程序。
package com.theitroad.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("https://www.theitroad.local/employee", "Employees");
//append root element to document
doc.appendChild(rootElement);
//append first child element to root element
rootElement.appendChild(getEmployee(doc, "1", "hyman", "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/hyman/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="https://www.theitroad.local/employee"> <Employee id="1"> <name>hyman</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>

