用dom4j对xml文件的读取和添加学习

XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入Schema文件的方式。 -->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="hr.xsd">
	<employee no="3309">
		<name>张三</name>
		<age>35</age>
		<salary>5000</salary>
		<department>
			<dname>会计部</dname>
			<address>XX大厦-B301</address>
		</department>
	</employee>

	<employee no="3506">
		<name>李四</name>
		<age>28</age>
		<salary>3000</salary>
		<department>
			<dname>工程部</dname>
			<address>XX大厦-B401</address>
		</department>
	</employee>
</hr>

Xml文件的Schema代码约束:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
	<element name="hr">
		<complexType>
			<sequence>
				<!-- 设置元素最小出现次数和最大出现次数。 -->
				<element name="employee" minOccurs="1" maxOccurs="99999">

					<!-- 当有子元素时使用complexType标签 -->
					<complexType>
						<sequence>
							<element name="name" type="string"></element>
							<element name="age" type="integer"></element>
							<element name="salary" type="integer"></element>
							<element name="department">
								<complexType>
									<sequence>
										<element name="dname" type="string"></element>
										<element name="address" type="string"></element>
									</sequence>
								</complexType>
							</element>
						</sequence>
						<!-- 设置元素中的属性。 -->
						<attribute name="no" type="integer" use="required"></attribute>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>

读取xml文件的元素内容

import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XMLReader {

	public void readXML() {
		// SAXReader类是读取XML文件的核心类,用于将XML解析后以树的形式保存在内存中。
		SAXReader reader = new SAXReader();
		String file = "src/hr.xml";
		try {
			Document hrXml = reader.read(file);
			// 读取到的所有的XML文件的标签都是element对象,getRootElement是获取根节点的对象,即hr标签。
			Element root = hrXml.getRootElement();
			// elements方法用于获取指定的标签集合。
			List<Element> employees = root.elements("employee");

			for (Element employee : employees) {
				// element方法用于获取唯一的标签对象。
				Element name = employee.element("name");
				// getText方法用于获取标签的文本。
				String empName = name.getText();
				System.out.println(empName);
				// 直接通过对象获取标签文本。
				System.out.println(employee.elementText("age"));
				System.out.println(employee.elementText("salary"));
				Element department = employee.element("department");
				System.out.println(department.elementText("dname"));
				System.out.println(department.elementText("address"));
				// 获取标签的属性。
				Attribute att = employee.attribute("no");
				System.out.println(att.getText());
			}
		} catch (DocumentException e) {

			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		XMLReader read = new XMLReader();
		read.readXML();

	}

}

运行结果为:
用dom4j对xml文件的读取和添加学习

添加xml文件的元素内容

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XMLWriter {

	public void writeXML() {
		// SAXReader类是读取XML文件的核心类,用于将XML解析后以树的形式保存在内存中。
		SAXReader reader = new SAXReader();
		String file = "src/hr.xml";
		try {
			Document hrXml = reader.read(file);
			// 读取到的所有的XML文件的标签都是element对象,getRootElement是获取根节点的对象,即hr标签。
			Element root = hrXml.getRootElement();
			// 为节点添加新的employee对象。
			Element employee = root.addElement("employee");
			// 为元素添加属性。
			employee.addAttribute("no", "3058");
			// 为节点添加新的对象。
			Element name = employee.addElement("name");
			name.setText("王二猫");
			Element age = employee.addElement("age");
			age.setText("26");
			Element salary = employee.addElement("salary");
			salary.setText("3800");
			Element department = employee.addElement("department");
			Element dname = department.addElement("dname");
			dname.setText("人事部");
			Element address = department.addElement("address");
			address.setText("XX大厦-B501");
			// 把在内存中写好的新的树对象写入到xml文件中。
			Writer writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
			hrXml.write(writer);
			writer.close();

		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		XMLWriter write = new XMLWriter();
		write.writeXML();

	}

}

添加完的xml文件内容为:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入Schema文件的方式。 -->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="hr.xsd">
	<employee no="3309">
		<name>张三</name>
		<age>35</age>
		<salary>5000</salary>
		<department>
			<dname>会计部</dname>
			<address>XX大厦-B301</address>
		</department>
	</employee>

	<employee no="3506">
		<name>李四</name>
		<age>28</age>
		<salary>3000</salary>
		<department>
			<dname>工程部</dname>
			<address>XX大厦-B401</address>
		</department>
	</employee>
	<employee no="3058">
		<name>王二猫</name>
		<age>26</age>
		<salary>3800</salary>
		<department>
			<dname>人事部</dname>
			<address>XX大厦-B501</address>
		</department>
	</employee>
</hr>

注:刚添加完的xml文件的元素内容没有格式只有一行,格式是之后手动调整的。

上一篇:xml文件解析


下一篇:dom4j简单使用