最近在看湖北中烟OA门户的项目,中烟门户里面解析XML文档使用的是DocumentHelper,之前做的智能导航项目里面解析XML使用的是SAXReader,很好奇它们有什么区别,于是就查资料将两者的用法简单总结了一下。

SAXReader用法示例

package com.eway.signature.action;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class UploadFile{private static Log logger = LogFactory.getLog(UploadFile.class);//要上传的配置文件的路径static String uploadCfgFile = "WEB-INF/conf/uploadfile.xml";Document uploadDocument;//文档对象实体Map uploadMap = new HashMap();/*** 获取配置文件的绝对路径* @param request* @return*/private String getUploadCfgFilePath(ServletRequest request){return ((HttpServletRequest) request).getSession().getServletContext().getRealPath("uploadCfgFile");}/*** 初始化配置文件* @param request* @return*/private Document initUploadCfgDocument(ServletRequest request){SAXReader saxReader = new SAXReader();try {//得到指定文件,以流的形式对文件进行序列化FileInputStream fis = new FileInputStream(getUploadCfgFilePath(request));uploadDocument = (Document) saxReader.read(fis);} catch (FileNotFoundException e) {logger.debug(e);} catch (DocumentException e) {logger.debug(e);}return uploadDocument;}/*** 获取配置文件* @param request* @return*/private Document getUploadCfgDocument(ServletRequest request){if (this.uploadDocument == null) {this.uploadDocument = initUploadCfgDocument(request);}return this.uploadDocument;}/*** 获取某个指定ticket节点的配置属性* @param request* @return*/private Map getUploadMap(ServletRequest request){Document uploadDocument = getUploadCfgDocument(request);//得到XML的根节点(message)Element root = uploadDocument.getRootElement();Iterator tickets = root.element("body").element("ticketNotify").elementIterator();//获取ticketNotify节点下所有的ticket节点的配置属性,并将其放到Map中while (tickets.hasNext()) {Element ticket = (Element) tickets.next();uploadMap.put("id", ticket.attributeValue("id"));uploadMap.put("dealTime", ticket.attributeValue("dealTime"));uploadMap.put("status", ticket.attributeValue("status"));}//Element.asXML方法,获得包括该标签的所有XML数据
//      System.out.println(root.element("body").asXML());return uploadMap;}
}

DocumentHelper的用法示例

package com.eway.signature.action;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;public class UploadFile{private static Log logger = LogFactory.getLog(UploadFile.class);//要上传的配置文件的路径static String uploadCfgFile = "WEB-INF/conf/uploadfile.xml";Document uploadDocument;//文档对象实体Map uploadMap = new HashMap();/*** 获取配置文件的绝对路径* @param request* @return*/private String getUploadCfgFilePath(ServletRequest request){return ((HttpServletRequest) request).getSession().getServletContext().getRealPath("uploadCfgFile");}/*** 获取配置文件* @param request* @return*/private Document getUploadCfgDocument(ServletRequest request){String sText;StringBuffer sb = new StringBuffer();try {//得到指定文件,以流的形式对文件进行序列化BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(getUploadCfgFilePath(request))));for (;;) {sText = br.readLine();//一行一行的读取数据if(sText == null){break;}sb.append(sText);}uploadDocument = DocumentHelper.parseText(sb.toString());} catch (FileNotFoundException e) {logger.debug(e);} catch (DocumentException e) {logger.debug(e);} catch (IOException e) {logger.debug(e);}return uploadDocument;}/*** 获取某个指定ticket节点的配置属性* @param request* @return*/private Map getUploadMap(ServletRequest request){Document document = getUploadCfgDocument(request);//获取根节点Element root = document.getRootElement();Iterator tickets = root.element("body").element("ticketNotify").elementIterator();//获取ticketNotify节点下所有的ticket节点的配置属性,并将其放到Map中while (tickets.hasNext()) {Element ticket = (Element) tickets.next();uploadMap.put("id", ticket.attributeValue("id"));uploadMap.put("dealTime", ticket.attributeValue("dealTime"));uploadMap.put("status", ticket.attributeValue("status"));}//Element.asXML方法,获得包括该标签的所有XML数据
//      System.out.println(root.element("body").asXML());return uploadMap;}}

更多使用请参看DocumentHelper的在线API:

http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/DocumentHelper.html#createAttribute%28org.dom4j.Element,%20org.dom4j.QName,%20java.lang.String%29

SAXReader可以直接使用read()方法将一个文件输入流转换成Document对象;而DocumentHelper不能直接操作文件输入流,只能使用parseText()方法将string字符串解析成Document对象,所以必须先将文件输入流写到String字符串中,再由DocumentHelper去解析。

更多使用继续发现中~

DocumentHelper和SAXReader解析XML字符串相关推荐

  1. java saxreader 字符串_DocumentHelper 和SAXReader 解析xml 字符串

    DocumentHelper 解析xml字符串 String xml=com.jetsen.platform.util.FileUtil.getFileContent(request.getSessi ...

  2. 框架选修课之dom4j解析xml字符串实例

    DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...

  3. dom4j解析xml字符串实例

    //先加入dom4j.jar包 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import or ...

  4. java dom解析xml字符串_dom4j解析xml字符串实例

    java部分 DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文 ...

  5. java解析xml工具类_通过dom4j解析XML字符串XMLDocUtil工具类转换为XML文档及获取指定根节点及指定节点路径内容代码示例...

    一.前言 通过dom4j解析XML文档的XMLDocUtil工具类,进行解析xml字符串为Document文档对象.获取根节点元素路径内容getRootElement.获取唯一路径节点的值getSin ...

  6. Java解析XML字符串格式

    Java解析XML字符串格式 前言 代码示例 结果展示 前言 java解析XML字符串格式使用的是Dom4j这一种方式; dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文 ...

  7. Dom4j解析xml字符串

    Dom4j解析xml字符串到List或JSON 通用代码 依赖jar import org.dom4j.Document; import org.dom4j.DocumentHelper; impor ...

  8. SAX解析xml字符串

    最近需要接入微信支付的返回参数,将其入库,微信的返回参数是xml格式的,这里采用sax进行数据解析 package com.xx.utils;import java.io.StringReader; ...

  9. c语言解析xml字符串_Python XML解析

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

最新文章

  1. docker 容器无法使用中文 解决方案
  2. html转chm后脚本错误,win10系统打开chm资料弹出窗口提示脚本出现错误的恢复办法...
  3. 【收藏】在 Linux 上以 All-in-One 模式安装 KubeSphere
  4. python写web自动化_Web接口开发与自动化测试——基于Python语言
  5. CF 1642 F. Two Arrays 随机 + sosdp
  6. 微信小程序和传统网页开发的区别
  7. 隐藏我的电脑中的多余图标
  8. 安卓 notification2
  9. python 多线程读写文件_python多线程写入文件问题
  10. Python获取图片的大小/尺寸
  11. 题目1555:重复子串
  12. ISO 37301:2021《合规管理体系 要求及使用指南》国际标准解读及相关标准
  13. eclipse安装中文补丁包
  14. USPS国际快递查询单号
  15. Z-Wave 700 秘钥生成、固件签名、及OTA过程
  16. [SV]SystemVerilog 断言(SVA)检查器库(OVL)
  17. ViewPager+Fragment刷新更新Fragment
  18. 记 计算机 科学学院 教师,永做学生的操作系统——记计算机科学技术学院、软件学院教师金虎...
  19. 离散数学实验报告 实验3 欧拉路的确定
  20. C#和Access数据库连接

热门文章

  1. 关于iPhone 中sqlite文件的使用
  2. C# 语法练习(2): 字符转义
  3. android打包apk时混淆遇到的问题
  4. iOS并发(多线程)
  5. Tensorflow生成自己的图片数据集TFrecords(支持多标签label)
  6. MFC文件打开格式,MFC默认打开文档后缀(支持打开多图像格式)
  7. ELK技术栈—Kibana
  8. flutter web:lottie jssdk报错处理
  9. EOS生产区块:解析插件producer_plugin
  10. Traefik访问master节点不通的问题定位