Dom4j读写xml文件

参考文档:

dom4j对xml文件进行 更新操作

Dom4j完整教程

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它地址。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包, Hibernate用它来读写配置文件。

今天项目需要对已存在的xml文件进行更新,对比之下,感觉dom4j还是比较适合的,现在将代码贴上,方便以后参考

/**
 * 
 */
package com.zlp.test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
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.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * @author zhangliping
 *
 */
public class XmlUtil {

	/**
     * 将订单信息写入xml文件
     * @param map
     * @throws DocumentException
     * @throws IOException
     */
    public void writeXML(Map map) throws DocumentException, IOException {

		if (map != null && map.get("respCode").equals("0000")) {// 订单提交成功,未付款
			// 将订单信息写入文件
			File inputXML = new File("d:/orderList.xml");
			// 使用 SAXReader 解析 XML 文档 orderList.xml
			SAXReader saxReader = new SAXReader();
			Document document = saxReader.read(inputXML);

			Element orders = document.getRootElement();// 根节点

			Element order = orders.addElement("order");// 订单节点

			Element merchantId = order.addElement("merchantId");// 商户ID
			merchantId.addAttribute("name", "sitinspring");    
			merchantId.setText(map.get("merchantId").toString());

			Element transType = order.addElement("transType");// 订单状态
			transType.setText(map.get("transType") == null ? "00" : map.get(
					"transType").toString());

			Element merchantOrderId = order.addElement("merchantOrderId");// 订单ID
			merchantOrderId.setText(map.get("merchantOrderId").toString());

			Element merchantOrderTime = order.addElement("merchantOrderTime");// 订单时间
			merchantOrderTime.setText(map.get("merchantOrderTime").toString());

			Element merchantOrderAmt = order.addElement("merchantOrderAmt");// 订单金额
			merchantOrderAmt.setText(map.get("merchantOrderAmt").toString());

			Writer writer = new FileWriter(inputXML);
			OutputFormat format = OutputFormat.createPrettyPrint();// 格式化
			XMLWriter xmlWriter = new XMLWriter(writer, format);
			xmlWriter.write(document);
			xmlWriter.close();
		}
	}
    
    /**
	 * 读取订单列表xml文件 放入map,多个返回list
	 * 
	 * @param fileName
	 * @return
	 * @throws DocumentException
	 */
    private List readXML(String fileName) throws DocumentException {
		List orderList = new ArrayList();
		// 读取文件
		File inputXML = new File(fileName);
		// 使用SAXReader解析xml
		SAXReader saxReader = new SAXReader();
		Document document = saxReader.read(inputXML);
		Element orders = document.getRootElement();
		for (Iterator i = orders.elementIterator(); i.hasNext();) {
			Element order = (Element) i.next();

			Element merchantId = order.element("merchantId");
			Element transType = order.element("transType");
			Element merchantOrderId = order.element("merchantOrderId");
			Element merchantOrderTime = order.element("merchantOrderTime");
			Element merchantOrderAmt = order.element("merchantOrderAmt");
			Map map = new HashMap();
			map.put("merchantId", merchantId.getText());
			map.put("transType", transType.getText());
			map.put("merchantOrderId", merchantOrderId.getText());
			map.put("merchantOrderTime", merchantOrderTime.getText());
			map.put("merchantOrderAmt", merchantOrderAmt.getText());
			orderList.add(map);
		}
		return orderList;
	}
	
	
	/**
	 * @param args
	 * @throws IOException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws DocumentException,
			IOException {
		XmlUtil xmlUtil = new XmlUtil();
		HashMap map = new HashMap();
		map.put("respCode", "0000");
		map.put("merchantId", "merchantId");
		map.put("transType", "transType");
		map.put("merchantOrderId", "merchantOrderId");
		map.put("merchantOrderTime", "merchantOrderTime");
		map.put("merchantOrderAmt", "merchantOrderAmt");
		xmlUtil.writeXML(map);
	}

}


运行效果:

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

<list> 
  <order>
    <merchantId name="sitinspring">merchantId</merchantId>
    <transType>transType</transType>
    <merchantOrderId>merchantOrderId</merchantOrderId>
    <merchantOrderTime>merchantOrderTime</merchantOrderTime>
    <merchantOrderAmt>merchantOrderAmt</merchantOrderAmt>
  </order>
</list>


注意:由于Dom4j对于文本的写入带有转义的过程,所以在读取写入的xml时,需要进行转义变换的操作。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值