jdom工具類

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"));
        }
    }
}
相關文章
相關標籤/搜索