基于Dom4j2的XML组装和解析

基于Dom4j2的XML组装和解析

 

一、组装

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;


/**
 * @comment:XML组装
 * @author 傅里叶级数
 */
public class XmlPack {

	/**
	 * @comment: 需求,创建一个学生信息的XML,学生信息为:姓名、年龄、性别、学校
	 * @param: 
	 * @author: 傅里叶级数
	 */
	public static void main(String[] args) {
		// 1.创建文档
		Document doc = DocumentHelper.createDocument();
		// 2.创建根元素
		Element root = doc.addElement("STUDENTS");
		// 3.获取学生信息表数据,根据学生数据List遍历添加学生信息
		List<Map<String,Object>> listStu = getStuInfo();
		if(listStu!=null && listStu.size()>0) {
			for (Map<String, Object> map : listStu) {
				Element student = root.addElement("STUDENT");
				student.addElement("NAME").setText(map.get("name") ==null?"":map.get("name").toString());
				student.addElement("AGE").setText(map.get("age") ==null?"":map.get("age").toString());
				student.addElement("SEX").setText(map.get("sex") ==null?"":map.get("sex").toString());
				student.addElement("SCHOOL").setText(map.get("school") ==null?"":map.get("school").toString());
			}
		}
		/*
		 * 4.将组装好的xml输出为文件
		 */
		//设置输出格式
		OutputFormat format = OutputFormat.createPrettyPrint();
		//设置文件编码
		format.setEncoding("UTF-8");
		//将文档document输出到指定XML文件中并关闭XMLWriter对象
		try {
			XMLWriter xml = new XMLWriter(new FileOutputStream("students.xml"),format);
			//设置将文本中的特殊字符不需要转义
			xml.setEscapeText(false);
			xml.write(doc);
			xml.flush();
			xml.close();
			System.out.println("完成");
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

	
	
	
	
	
	/**
	 * @comment: 组装学生信息
	 * @param: 
	 * @author: 傅里叶级数
	 */
	public static List<Map<String,Object>> getStuInfo(){
		List<Map<String,Object>> listStu = new ArrayList<>();
		Map<String,Object> st1 = new HashMap<>();
		st1.put("name", "张三");
		st1.put("age", 14);
		st1.put("sex", '男');
		st1.put("school", "华水");
		Map<String,Object> st2 = new HashMap<>();
		st2.put("name", "李四");
		st2.put("age", 34);
		st2.put("sex", '男');
		st2.put("school", null);
		Map<String,Object> st3 = new HashMap<>();
		st3.put("name", "王萌萌");
		st3.put("age", 18);
		st3.put("sex", '女');
		st3.put("school", "郑航");
		Map<String,Object> st4 = new HashMap<>();
		st4.put("name", "田甜甜");
		st4.put("age", 17);
		st4.put("sex", null);
		st4.put("school", "华水");
		Map<String,Object> st5 = new HashMap<>();
		st5.put("name", "王五");
		st5.put("age", 23);
		st5.put("sex", '男');
		st5.put("school", "轻工业");
		Map<String,Object> st6 = new HashMap<>();
		st6.put("name", "路人甲");
		st6.put("age", null);
		st6.put("sex", null);
		st6.put("school", "");
		
		listStu.add(st1);
		listStu.add(st2);
		listStu.add(st3);
		listStu.add(st4);
		listStu.add(st5);
		listStu.add(st6);
		return listStu;
	}
}

组装结果:students.xml

<?xml version="1.0" encoding="UTF-8"?>

<STUDENTS>
  <STUDENT>
    <NAME>张三</NAME>
    <AGE>14</AGE>
    <SEX>男</SEX>
    <SCHOOL>华水</SCHOOL>
  </STUDENT>
  <STUDENT>
    <NAME>李四</NAME>
    <AGE>34</AGE>
    <SEX>男</SEX>
    <SCHOOL></SCHOOL>
  </STUDENT>
  <STUDENT>
    <NAME>王萌萌</NAME>
    <AGE>18</AGE>
    <SEX>女</SEX>
    <SCHOOL>郑航</SCHOOL>
  </STUDENT>
  <STUDENT>
    <NAME>田甜甜</NAME>
    <AGE>17</AGE>
    <SEX></SEX>
    <SCHOOL>华水</SCHOOL>
  </STUDENT>
  <STUDENT>
    <NAME>王五</NAME>
    <AGE>23</AGE>
    <SEX>男</SEX>
    <SCHOOL>轻工业</SCHOOL>
  </STUDENT>
  <STUDENT>
    <NAME>路人甲</NAME>
    <AGE></AGE>
    <SEX></SEX>
    <SCHOOL></SCHOOL>
  </STUDENT>
</STUDENTS>

 

 

二、解析

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

/**
 * @comment: 使用Dom4j2 进行XML解析
 * @author 傅里叶级数
 */
public class XmlOutput {

	/**
	 * @comment: 使用Dom4j2进行XML解析
	 * @param: 
	 * @author: 傅里叶级数
	 */
	public static void main(String[] args) {
		// 1.SAXReader可以通过多种方式读取xml数据,并返回Document格式的对象。通过查看源码,可以看出read()方法接收File,InputStream和URL等格式的参数来读取相应的xml数据。在代码里我演示了读取xml文档和xml格式的字符串两种方式。当然,字符串要根据相应的编码转成输入流才能被SAXReader读取
		SAXReader reader = new SAXReader();
		// 2.定义结果集
		List<Map<String,Object>> listMap = new ArrayList<>();
		// 3.获取xml文件
		File file = new File("students.xml");
		try {
			// 4.将file中的内容读取成文件
			Document doc = reader.read(file);
			// 5.获取根节点
			Element root = doc.getRootElement();
			// 6.使用迭代输出
			for (Iterator<?> it = root.elementIterator(); it.hasNext();) {
				Element foo = (Element) it.next();
				Map<String,Object> map = new HashMap<>();
				map.put("name", foo.elementText("NAME"));
				map.put("age", foo.elementText("AGE"));
				map.put("sex", foo.elementText("SEX"));
				map.put("school", foo.elementText("SCHOOL"));
				listMap.add(map);
			}
			System.out.println(listMap);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}finally {
			// 7.解析完成之后将对象设置为空,方面GC快速回收
			reader=null;
			file = null;
		}
	}

}

运行结果:

[{school=华水, sex=男, name=张三, age=14}, {school=, sex=男, name=李四, age=34}, {school=郑航, sex=女, name=王萌萌, age=18}, {school=华水, sex=, name=田甜甜, age=17}, {school=轻工业, sex=男, name=王五, age=23}, {school=, sex=, name=路人甲, age=}]

 

转载于:https://my.oschina.net/FourierSeriesNzh/blog/2989530

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值