import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StringReader; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; /** * 提取解析xml後的結果值,外部可以直接使用解析後的結果<br> * Create Date: 2008-2-22 <br> * @version 1.0 22 2 2008 * */ public class XmlReasult { private String sTotalHit = "";// 命中的總數 private HashMap<String, String> mapEryDBHit = new HashMap<String, String>(); private String sTime = "";// 檢索所用的時間 private String sHtmlContent = "";// 轉化完的html代碼內容 private BufferedReader in = null;// 存儲xml文件內容的數據流 private String sXmlContent = "";// 存儲xml文件內容信息 /** * 以下對initial方法中所使用的變量進行舉例說明:<br> * @param sServer:http://192.168.0.238/search1.dhtml <br> * @param sXslFileName:xmlresult.xsl <br> * @param sInputQuery:sQuery=computer&sDbs=de,us&iPage=1&iPageSize=20&sFieldList=PN,TI,PA,AU<br> * @throws Exception */ public void initial(String sServer, String sXslFileName, String sInputQuery)throws Exception { URL url = new URL(sServer); URLConnection connection = url.openConnection(); connection.setDoOutput(true); PrintWriter out = new PrintWriter(connection.getOutputStream()); out.print(sInputQuery); out.close(); this.in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String sLine = ""; while ((sLine = in.readLine()) != null) { this.sXmlContent = this.sXmlContent + sLine + "/n"; } // SAX解析XML流 begin ParseXML parseXml = new ParseXML(); try { parseXml.parse(sXmlContent); sTotalHit = parseXml.getSTotalHit();// 命中總數 sTime = parseXml.getSTime();// 檢索耗時 // 各個數據庫中命中的結果信息存儲到一個mapEryDBHit中 mapEryDBHit = (HashMap<String, String>) parseXml.getMapEryDBHit(); } catch (Exception e) { e.printStackTrace(); } // // SAX解析XML流後,使用xsl樣式表吧把xml文件轉化成html代碼 this.sHtmlContent = XmlToHtml(sXslFileName, this.sXmlContent); } public String XmlToHtml(String sXslFileName, String sXmlContent) throws Exception { String sHtmlCont = "";// 用於存儲臨時html代碼 String sTemp = "";// 臨時變量,用於存取文件中每行的文本文字 String sFileContent = ""; FileInputStream fis = new FileInputStream(sXslFileName); InputStreamReader isr = new InputStreamReader(fis); BufferedReader buf = new BufferedReader(isr); while ((sTemp = buf.readLine()) != null) { // 讀取文件內容的每一行合成一個String字符串 sFileContent = sFileContent + sTemp; } // xsl內容字符串轉變爲字符流 StringReader bosXslSou = new StringReader(sFileContent); // xml內容字符串轉變爲字符流 StringReader bosXmlSou = new StringReader(sXmlContent); try { TransformerFactory tFactory = TransformerFactory.newInstance(); // 獲取xsl的字符流 Transformer transformer = tFactory.newTransformer (new javax.xml.transform.stream.StreamSource(bosXslSou)); ByteArrayOutputStream bosRes = new ByteArrayOutputStream(); transformer.transform(new javax.xml.transform.stream.StreamSource(bosXmlSou), new javax.xml.transform.stream.StreamResult(bosRes)); sHtmlCont = new String(bosRes.toString()); } catch (Exception e) { e.printStackTrace(); } return sHtmlCont.toString();//返回html代碼內容 } public HashMap<String, String> getMapEryDBHit() { return mapEryDBHit; } public String getSTotalHit() { return sTotalHit; } public String getSTime() { return sTime; } public String getSResult() { return sHtmlContent; } } |
解析xml文件
日誌 > 個人日記
評論列表
溫馨提示:點擊驗證碼輸入框,以獲取驗證碼
請輸入驗證碼:
loading......
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.