DocumentHelper和SAXReader解析XML字符串
生活随笔
收集整理的這篇文章主要介紹了
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字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 轻量级的日期时间控件Pikaday
- 下一篇: JavaScript实现表单的分向提交