package com.wanbang.wbyyb.common.util;

import com.alibaba.fastjson.JSONObject;
import com.wanbang.wbyyb.common.constant.ErrorEnum;
import com.wanbang.wbyyb.common.exception.BusinessException;
import com.wanbang.wbyyb.service.payment.impl.PaymentServiceImpl;
import org.apache.commons.codec.digest.DigestUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.StringUtils; import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap; public class XmlUtils {
private static final Logger logger = LoggerFactory.getLogger(PaymentServiceImpl.class); /**
* 根据xml标签名的ASCII码正序排列的xml
* @param filePath
* @return
*/
public static Document getXml(String filePath){
Document document = null;
try{
Resource resource = null;
if (!StringUtils.isEmpty(filePath))
resource = new ClassPathResource(filePath);
else
throw new BusinessException(ErrorEnum.ERROR_PARAM); File file = resource.getFile(); /**
* 读取xml转有序map
*/
SAXReader reader = new SAXReader();
Document doc = reader.read(file);
Element root = doc.getRootElement();
Iterator iterator = root.elementIterator();
Map<String,Object> map = new TreeMap<>();
while (iterator.hasNext()) {
Element element = (Element) iterator.next();
String key = element.getName();
String value = element.getText();
map.put(key, value);
} /**
* 有序map转xml
*/
document = DocumentHelper.createDocument();
Element newRoot = document.addElement("xml");
Set<String> keys = map.keySet();
for(String k:keys) {
newRoot.addElement(k).addText(map.get(k).toString());
}
} catch (IOException e) {
logger.error("com.wanbang.wbyyb.service.payment.impl: ",e);
} catch (DocumentException e) {
logger.error("com.wanbang.wbyyb.service.payment.impl:",e);
}
return document;
}public static Object xml2Json(String xmlStr){
JSONObject jsonObject = new JSONObject();
try {
Document document = DocumentHelper.parseText(xmlStr);
Element element = document.getRootElement();
Iterator iterator = element.elementIterator();
while (iterator.hasNext()) {
Element ele = (Element)iterator.next();
jsonObject.put(ele.getName(), ele.getText());
}
} catch (DocumentException e) {
e.printStackTrace();
}
return jsonObject;
}

}
    @Test
public void createTest() {
Document doc = DocumentHelper.createDocument();
//创建一个名为xml的根节点,因为是第一个创建,所以是根节点,再通过doc创建一个则会报错。
Element root = doc.addElement("xml");
Element codeEle = root.addElement("return_code");
Element msg = root.addElement("return_msg");
codeEle.addCDATA("SUCCESS"); //生成结果<return_code><![CDATA[SUCCESS]]></return_code>
codeEle.addAttribute("id", "101"); //添加属性
msg.setText("SUCCESS"); //生成结果<return_code>SUCCESS</return_code>
msg.setText("<![CDATA[SUCCESS]]>"); //生成结果<return_msg>&lt;![CDATA[SUCCESS]]&gt;</return_msg>
System.out.println(doc.asXML()); //xml转String
}

dom4j 常用操作的更多相关文章

  1. 【三】用Markdown写blog的常用操作

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  2. php模拟数据库常用操作效果

    test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...

  3. Mac OS X常用操作入门指南

    前两天入手一个Macbook air,在装软件过程中摸索了一些基本操作,现就常用操作进行总结, 1关于触控板: 按下(不区分左右)            =鼠标左键 control+按下        ...

  4. mysql常用操作语句

    mysql常用操作语句 1.mysql -u root -p   2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...

  5. nodejs配置及cmd常用操作

    一.cmd常用操作 1.返回根目录cd\ 2.返回上层目录cd .. 3.查找当前目录下的所有文件dir 4.查找下层目录cd window 二.nodejs配置 Node.js安装包及源码下载地址为 ...

  6. Oracle常用操作——创建表空间、临时表空间、创建表分区、创建索引、锁表处理

    摘要:Oracle数据库的库表常用操作:创建与添加表空间.临时表空间.创建表分区.创建索引.锁表处理 1.表空间 ■  详细查看表空间使用状况,包括总大小,使用空间,使用率,剩余空间 --详细查看表空 ...

  7. python 异常处理、文件常用操作

    异常处理 http://www.jb51.net/article/95033.htm 文件常用操作 http://www.jb51.net/article/92946.htm

  8. byte数据的常用操作函数[转发]

    /// <summary> /// 本类提供了对byte数据的常用操作函数 /// </summary> public class ByteUtil { ','A','B',' ...

  9. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

随机推荐

  1. MyBais中xxMap.xml中的知识点

    添加新的mapper的时候下面两个标红的地方要注意,如果统一约定好命名的话都还好,但是就怕一会这样一会那样的业务代码:总之小心! <!-- spring与mybatis整合配置,扫描所有dao, ...

  2. [!] No `Podfile' found in the project directory.

    1.cd ios/ 2.vim Podfile(创建Podfile)且输入内容 source'https://github.com/CocoaPods/Specs.git'platform:ios,' ...

  3. jQuery 获取标签属性值的问题

    jquery attr()无法获取属性值问题 css里明明已经设置过了: 可还是获取不了: 求指导.   一定是undefined,attr是用来获得或设置标签属性的,不是用来获得CSS属性的.如果你 ...

  4. scrapy分布式原理

    scrapy分布式原理   关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键 ...

  5. Codeforces 1106F(数论)

    要点 998244353的原根g = 3,意味着对于任意\[1 <= x,y<p\]\[x\neq\ y\]\[g^x\%p\neq\ g^y\%p\]因此可以有构造序列\(q(a)与a一 ...

  6. python入门之数据类型之列表、元组、字典

    list 格式: test_list = ["a",123,[1,"b"]] 索引: >>>print(test_list[0]) " ...

  7. [未读]angularjs权威教程

    正在啃,赶脚不错...

  8. pm2日志切割

    此为pm2 日志按每天切割的示例 1.在crontab里添加定时任务 * * * >& 2.cutlog.sh 代码内容 #!/bin/bash CURPATH="/var/l ...

  9. ASP.NET MVC 复制MVC项目代码到同一个项目的时候报错The request for ‘home’ has found the following matching controll

    ASP.NET MVC 复制MVC项目代码到同一个项目的时候报错The request for ‘home’ has found the following matching controll “/” ...

  10. BBS项目需求分析及表格创建

    1.项目需求分析 1.登陆功能(基于ajax,图片验证码) 2.注册功能(基于ajax,基于forms验证) 3.博客首页 4.个人站点 5.文章详情 6.点赞,点踩 7.评论 --根评论 --子评论 ...