DocumentHelper和SAXReader解析XML字符串
最近在看湖北中烟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字符串相关推荐
- java saxreader 字符串_DocumentHelper 和SAXReader 解析xml 字符串
DocumentHelper 解析xml字符串 String xml=com.jetsen.platform.util.FileUtil.getFileContent(request.getSessi ...
- 框架选修课之dom4j解析xml字符串实例
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...
- dom4j解析xml字符串实例
//先加入dom4j.jar包 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import or ...
- java dom解析xml字符串_dom4j解析xml字符串实例
java部分 DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文 ...
- java解析xml工具类_通过dom4j解析XML字符串XMLDocUtil工具类转换为XML文档及获取指定根节点及指定节点路径内容代码示例...
一.前言 通过dom4j解析XML文档的XMLDocUtil工具类,进行解析xml字符串为Document文档对象.获取根节点元素路径内容getRootElement.获取唯一路径节点的值getSin ...
- Java解析XML字符串格式
Java解析XML字符串格式 前言 代码示例 结果展示 前言 java解析XML字符串格式使用的是Dom4j这一种方式; dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文 ...
- Dom4j解析xml字符串
Dom4j解析xml字符串到List或JSON 通用代码 依赖jar import org.dom4j.Document; import org.dom4j.DocumentHelper; impor ...
- SAX解析xml字符串
最近需要接入微信支付的返回参数,将其入库,微信的返回参数是xml格式的,这里采用sax进行数据解析 package com.xx.utils;import java.io.StringReader; ...
- c语言解析xml字符串_Python XML解析
Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...
最新文章
- docker 容器无法使用中文 解决方案
- html转chm后脚本错误,win10系统打开chm资料弹出窗口提示脚本出现错误的恢复办法...
- 【收藏】在 Linux 上以 All-in-One 模式安装 KubeSphere
- python写web自动化_Web接口开发与自动化测试——基于Python语言
- CF 1642 F. Two Arrays 随机 + sosdp
- 微信小程序和传统网页开发的区别
- 隐藏我的电脑中的多余图标
- 安卓 notification2
- python 多线程读写文件_python多线程写入文件问题
- Python获取图片的大小/尺寸
- 题目1555:重复子串
- ISO 37301:2021《合规管理体系 要求及使用指南》国际标准解读及相关标准
- eclipse安装中文补丁包
- USPS国际快递查询单号
- Z-Wave 700 秘钥生成、固件签名、及OTA过程
- [SV]SystemVerilog 断言(SVA)检查器库(OVL)
- ViewPager+Fragment刷新更新Fragment
- 记 计算机 科学学院 教师,永做学生的操作系统——记计算机科学技术学院、软件学院教师金虎...
- 离散数学实验报告 实验3 欧拉路的确定
- C#和Access数据库连接