查看本章节

查看作业目录


需求说明:

使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。该文档的格式和数据如图所示

编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据_添加属性

实现思路:
  1. 创建Java项目,添加dom4j对应jar包,创建CreateCityXML类
  2. 调用DocumentHelper的createDocument方法创建根节点,调用addAttribute方法设置name属性,并且设置为根节点
  3. 调用DocumentHelper的createDocument方法创建子节点,调用对应父节点Element对象的add方法添加子节点(注意父子关系结构顺序)
  4. 如果需要属性则调用Element对象的addAttribute设置,如果需要内容则调用setText方法设置内容
  5. 最后使用OutputFormat.createPrettyPrint()创建格式化保存对象,对Xml文档的保存工作
  6. 创建main方法调用创建方法及保存方法进行测试
实现代码:
import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class CreateCityXML {
	private Document document;
	private Element rootElement;

	// 该方法用于创建根节点
	public void createRootElement() {
		// 创建XML文件的文档对象
		document = DocumentHelper.createDocument();
		// 创建根节点
		rootElement = DocumentHelper.createElement("country");
		// 为根节点添加属性name
		rootElement.addAttribute("name", "中国");
		// 将rootElement设为根节点
		document.setRootElement(rootElement);
	}

	// 该方法用于创建子节点
	public void createChildElement() {
		// 创建湖北省子节点
		Element hubeiElement = DocumentHelper.createElement("province");
		// 为湖北省节点添加属性
		hubeiElement.addAttribute("name", "湖北");
		// 创建武汉市节点
		Element wuhanElement = DocumentHelper.createElement("city");
		// 为武汉市节点设置文本内容
		wuhanElement.setText("武汉");
		// 创建十堰市节点
		Element shiyanElement = DocumentHelper.createElement("city");
		// 为十堰市节点设置文本内容
		shiyanElement.setText("十堰");
		// 将武汉市节点和十堰市节点添加到湖北省节点内
		hubeiElement.add(wuhanElement);
		hubeiElement.add(shiyanElement);
		// 添加湖北省子节点到根节点中
		rootElement.add(hubeiElement);

		// 创建浙江省子节点
		Element zhejiangElement = DocumentHelper.createElement("province");
		// 为浙江省节点添加属性
		zhejiangElement.addAttribute("name", "浙江");
		// 创建杭州市节点
		Element hangzhouElement = DocumentHelper.createElement("city");
		// 为杭州市节点设置文本内容
		hangzhouElement.setText("杭州");
		// 创建宁波市节点
		Element ningboElement = DocumentHelper.createElement("city");
		// 为宁波市节点设置文本内容
		ningboElement.setText("宁波");
		// 将杭州市节点和宁波市节点添加到湖北省节点内
		zhejiangElement.add(hangzhouElement);
		zhejiangElement.add(ningboElement);
		// 添加浙江省子节点到根节点中
		rootElement.add(zhejiangElement);
	}

	// 将数据写入XML文档
	public void createXML(String path) {
		// 创建OutputFormat对象,用于格式化输出
		OutputFormat format = OutputFormat.createPrettyPrint();
		// 设置文档的编码
		format.setEncoding("UTF-8");
		try {
			// 创建XMLWriter对象,用于输出XML文档
			XMLWriter writer = new XMLWriter(new FileWriter(path), format);
			// 将Document文档输入到city.xml文件中
			writer.write(document);
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		CreateCityXML createCityXML = new CreateCityXML();
		// 创建文档和根节点
		createCityXML.createRootElement();
		// 创建子节点
		createCityXML.createChildElement();
		// 生成XML文件
		createCityXML.createXML("H:/city.xml");
	}
}