Dom4J的常用方法

1.xml字符串解析:  在做微信支付时,都是在用xml做传输媒介,虽然微信SDK集成了xml转map的功能,但是顺带学习一下用dom4j将xml转map的方法,分享出来,代码如下:

/**
 * 将xml字符串转换为map集合
 *ClassName:TransferUtils
 *<p>company:wwww.kinglong.com</P>
 *<p>Desc:</p>
 * @author kinglong_hao
 * @date 2017年5月1日上午9:13:32
 */
public class TransferUtils {

public static Map<String, Object> transferMapFromXml(String xml) throws DocumentException{
		//创建容器
		Map<String, Object> map = new ConcurrentHashMap<String,Object>();
		Document document = DocumentHelper.parseText(xml);
		Element rootEle = document.getRootElement();  
		//获取根节点元素集合
		List elements = rootEle.elements();
		for(Iterator<Element> j = elements.iterator(); j.hasNext(); )  
	     {  
	         //获取子元素
	         Element element = j.next();  
	         //输出子元素  
	        map.put(element.getName(), element.getText());
	     }  
	         
		return map;
	}
}

另外,它的取值也多种多样:

// 枚举所有子节点
 for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
 Element element = (Element) i.next();
 // do something
 }
 // 枚举名称为 foo 的节点
 for ( Iterator i = root.elementIterator(foo); i.hasNext();) {
 Element foo = (Element) i.next();
 // do something
 }
 // 枚举属性
 for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
 Attribute attribute = (Attribute) i.next();
 // do something
 }

微信返回的xml字符串:

     " <xml><return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx8a3fcf509313fd74]]></appid>
<mch_id><![CDATA[1361137902]]></mch_id>
<nonce_str><![CDATA[5SQR7XiEr2hI6WQ4]]></nonce_str>
<sign><![CDATA[7E6B37367DD59FC4963A9EF7F2A2ADB1]]></sign>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[INVALID_REQUEST]]></err_code>
<err_code_des><![CDATA[201 商户订单号重复]]></err_code_des>
      </xml> "


2.xml字符串解析:  上一个只是一个特殊的简单案例,正常情况下遇到的大多会在上一个基础上有下一级节点,所以,这时只需要再次对其进行遍历即可,如果要封装的话,个人想到的是将其封装为对象,对象的下一级子节点为对象的属性即可.

public static void getMapFromXml(String xml) throws DocumentException {

		Document document = DocumentHelper.parseText(xml);
		//获取根节点
		Element root = document.getRootElement();
		// 遍历根节点下的子节点
		for (Iterator i = root.elementIterator(); i.hasNext();) {
			Element element = (Element) i.next();
			//dosome
			System.out.println(element.getName() );
			//继续遍历该子节点下的子节点
			for (Iterator j = element.elementIterator(); j.hasNext();) {
				Element ele = (Element) j.next();
				//dosome
				System.out.println("	" + ele.getName() + "=====>" + ele.getText());
			}
		}

	}
3.读取xml文件并解析,与字符串解析不同的就是document对象的获取方式不同,其余取值方法相同 

 // 从文件读取 XML,输入文件名,返回 XML 文档
 public Document read(String fileName) throws
MalformedURLException, DocumentException {
 SAXReader reader = new SAXReader();
 Document document = reader.read(new File(fileName));
 return document;
 } 
4.创建xml文档
public Document createDocument() {
 Document document = DocumentHelper.createDocument();
 Element root = document.addElement(root);
 Element author1 = root
 .addElement(author)
 .addAttribute(name, James) 
 .addAttribute(location, UK)
 .addText(James Strachan);
 Element author2 =root
 .addElement(author)
 .addAttribute(name, Bob)
 .addAttribute(location, US)
 .addText(Bob McWhirter);
 return document;
 } 
5.xml文档输出

public void write(Document document) throws IOException {
 // 指定文件
 XMLWriter writer = new XMLWriter(
 new FileWriter( output.xml )
 );
 writer.write( document );
 writer.close();
 // 美化格式
 OutputFormat format = OutputFormat.createPrettyPrint();
 writer = new XMLWriter( System.out, format );
 writer.write( document );
 // 缩减格式
 format = OutputFormat.createCompactFormat();
 writer = new XMLWriter( System.out, format );
 writer.write( document );
 } 






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值