DocumentHelper和SAXReader解析XML字符串
来源:互联网 发布:nba2k15mc霍华德的数据 编辑:程序博客网 时间:2024/05/17 03:51
最近在看湖北中烟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去解析。
更多使用继续发现中~
2 0
- DocumentHelper和SAXReader解析XML字符串
- 解析XML文件(字符串)的两种方法-----SAXReader 与 DocumentHelper
- 解析XML文件(字符串)的两种方法-----SAXReader 与 DocumentHelper
- SAXReader解析XML
- XML解析 SAXReader
- xml--dom4j SAXReader解析
- SAXReader解析xml
- SAXReader解析XML
- HttpURLConnection + SAXReader解析XML
- Java生成和解析XML格式文件和字符串的实例代码【dom4j中的SAXReader对象读取并解析xml文件】
- SAXReader saxReader = new SAXReader();来解析xml文件
- SAXReader saxReader = new SAXReader();来解析xml文件
- 用SAXReader解析xml文档
- 用SAXReader解析xml文档
- 用SAXReader解析xml文档
- 用SAXReader解析xml文档
- 用SAXReader解析xml文档
- 用SAXReader解析xml文档
- iOS7.0 iphone5边界黑框的问题
- 有关HealthKit的那些事
- HDU杭电5630 ( Rikka with Chess )
- Grunt学习——检查代码完整性
- 206. Reverse Linked List
- DocumentHelper和SAXReader解析XML字符串
- C# chart 属性
- MySQL数据库复制概念及数据库架构不断扩展方案
- JS nodeType返回类型
- 第二周项目2-就拿胖子说事
- 搜索引擎入门
- CodeForces 630A:Again Twenty Five!【水】
- Web前端开发-11
- hihoCoder Trie树