package com.kcb.common.util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.util.List; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * @author 張海峯 zhanghaifeng@kucangbao.com * @version 建立時間:2013-10-12 上午9:56:16 * 類說明 */ /** * 這個類提供一些 JDom 對象經常使用的方法。 * */ public class JDomUtil { /** * 根據指定路徑的XML文件創建JDom對象 * * @param filePath * XML文件的路徑 * @return 返回創建的JDom對象,創建不成功返回null 。 */ public static Document buildFromFile(String filePath) { try { SAXBuilder builder = new SAXBuilder(); Document anotherDocument = builder.build(new File(filePath)); return anotherDocument; } catch (JDOMException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自動生成 catch 塊 e.printStackTrace(); } return null; } /** * 根據XML 字符串 創建JDom對象 * * @param xmlString * XML格式的字符串 * @return 返回創建的JDom對象,創建不成功返回null 。 */ public static Document buildFromXMLString(String xmlString) { try { SAXBuilder builder = new SAXBuilder(); Document anotherDocument = builder.build(new StringReader(xmlString)); return anotherDocument; } catch (JDOMException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自動生成 catch 塊 e.printStackTrace(); } return null; } /** * 根據Dom對象創建JDom對象 * * @param Dom * org.w3c.dom.Document對象 * @return 返回創建的JDom對象,創建不成功返回null 。 */ public static Document buildFromDom(org.w3c.dom.Document Dom) throws JDOMException, IOException { org.jdom.input.DOMBuilder builder = new org.jdom.input.DOMBuilder(); Document jdomDoc = builder.build(Dom); return jdomDoc; } /** * 這個方法使用XMLOutputer將一個JDom對象輸出到標準輸出設備,使用 utf-8 編碼 * * @param myDocument * 將要被輸出的JDom對象 */ public static void outputToStdout(Document myDocument) { outputToStdout(myDocument, "utf-8"); } /** * 這個方法使用XMLOutputer將一個JDom對象輸出到標準輸出設備 * * @param myDocument * 將要被輸出的JDom對象 * @param encoding * 輸出使用的編碼 */ public static void outputToStdout(Document myDocument, String encoding) { try { XMLOutputter outputter = new XMLOutputter(); Format fm = Format.getRawFormat(); fm.setEncoding(encoding); outputter.setFormat(fm); outputter.output(myDocument, System.out); } catch (java.io.IOException e) { e.printStackTrace(); } } /** * 這個方法將JDom對象轉換字符串. * * @param document * 將要被轉換的JDom對象 */ public static String outputToString(Document document) { return outputToString(document, "utf-8"); } /** * 這個方法將JDom對象轉換字符串. * * @param document * 將要被轉換的JDom對象 * @param encoding * 輸出字符串使用的編碼 */ public static String outputToString(Document document, String encoding) { ByteArrayOutputStream byteRep = new ByteArrayOutputStream(); XMLOutputter outputter = new XMLOutputter(); Format fm = Format.getRawFormat(); fm.setEncoding(encoding); outputter.setFormat(fm); try { outputter.output(document, byteRep); } catch (Exception e) { } return byteRep.toString(); } /** * 這個方法將List對象轉換字符串. * * @param document * 將要被轉換的JDom對象 */ public static String outputToString(List list) { return outputToString(list, "utf-8"); } /** * 這個方法將List對象轉換字符串. * * @param document * 將要被轉換的JDom對象 * @param encoding * 輸出字符串使用的編碼 */ public static String outputToString(List list, String encoding) { ByteArrayOutputStream byteRep = new ByteArrayOutputStream(); XMLOutputter outputter = new XMLOutputter(); Format fm = Format.getRawFormat(); fm.setEncoding(encoding); outputter.setFormat(fm); try { outputter.output(list, byteRep); } catch (Exception e) { } return byteRep.toString(); } public static org.w3c.dom.Document outputToDom(org.jdom.Document jdomDoc) throws JDOMException { org.jdom.output.DOMOutputter outputter = new org.jdom.output.DOMOutputter(); return outputter.output(jdomDoc); } /** * 這個方法使用XMLOutputter將JDom對象輸出到文件 * * @param myDocument * 將要輸出的JDom對象 * @param filePath * 將要輸出到的磁盤路徑 */ public static void outputToFile(Document myDocument, String filePath) { outputToFile(myDocument, filePath, "utf-8"); } /** * 這個方法使用XMLOutputter將JDom對象輸出到文件 * * @param myDocument * 將要輸出的JDom對象 * @param filePath * 將要輸出到的磁盤路徑 * @param encoding * 編碼方式 */ public static void outputToFile(Document myDocument, String filePath, String encoding) { // setup this like outputDocument try { XMLOutputter outputter = new XMLOutputter(); Format fm = Format.getRawFormat(); fm.setEncoding(encoding); outputter.setFormat(fm); // output to a file FileWriter writer = new FileWriter(filePath); outputter.output(myDocument, writer); writer.close(); } catch (java.io.IOException e) { e.printStackTrace(); } } /** * 這個方法將JDom對象經過樣式單轉換. * * @param myDocument * 將要被轉換的JDom對象 * @param xslFilePath * XSL文件的磁盤路徑 */ public static void executeXSL(Document myDocument, String xslFilePath, StreamResult xmlResult) { try { TransformerFactory tFactory = TransformerFactory.newInstance(); // Make the input sources for the XML and XSLT documents org.jdom.output.DOMOutputter outputter = new org.jdom.output.DOMOutputter(); org.w3c.dom.Document domDocument = outputter.output(myDocument); javax.xml.transform.Source xmlSource = new javax.xml.transform.dom.DOMSource(domDocument); StreamSource xsltSource = new StreamSource(new FileInputStream(xslFilePath)); // Get a XSLT transformer Transformer transformer = tFactory.newTransformer(xsltSource); // do the transform transformer.transform(xmlSource, xmlResult); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } catch (org.jdom.JDOMException e) { e.printStackTrace(); } } // Main 函數,局部測試用。 public static void main(String argv[]) { // Document dom = JDomUtil.buildFromFile("f:/web.xml"); // List list=dom.getRootElement().getChildren("servlet"); // String vs_dom = JDomUtil.outputToString(list,"gb2312"); // System.out.println(vs_dom); String xmlString = "<record><row f1=\"111\" f2=\"111\"/><row f1=\"222\" f2=\"222\"/></record>"; Document dom = JDomUtil.buildFromXMLString(xmlString); List list = dom.getRootElement().getChildren("row"); int num = list.size(); for (int i = 0; i < num; i++) { Element element = (Element) list.get(i); System.out.println(element.getAttributeValue("f1")); System.out.println(element.getAttributeValue("f2")); } } }