?
import java.io.*;
import java.util.List;
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
/**
?* 這個(gè)類提供一些 JDom 對(duì)象常用的方法。
?*
?*/
public class JDomUtil {
?/**
? * 根據(jù)指定路徑的XML文件建立JDom對(duì)象
? *
? * @param filePath
? *??????????? XML文件的路徑
? * @return 返回建立的JDom對(duì)象,建立不成功返回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 自動(dòng)生成 catch 塊
???e.printStackTrace();
??}
??return null;
?}
?/**
? * 根據(jù)XML 字符串 建立JDom對(duì)象
? *
? * @param xmlString
? *??????????? XML格式的字符串
? * @return 返回建立的JDom對(duì)象,建立不成功返回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 自動(dòng)生成 catch 塊
???e.printStackTrace();
??}
??return null;
?}
?/**
? * 根據(jù)Dom對(duì)象建立JDom對(duì)象
? *
? * @param Dom
? *??????????? org.w3c.dom.Document對(duì)象
? * @return 返回建立的JDom對(duì)象,建立不成功返回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;
?}
?/**
? * 這個(gè)方法使用XMLOutputer將一個(gè)JDom對(duì)象輸出到標(biāo)準(zhǔn)輸出設(shè)備,使用 GBK 編碼
? *
? * @param myDocument
? *??????????? 將要被輸出的JDom對(duì)象
? */
?public static void outputToStdout(Document myDocument) {
??outputToStdout(myDocument, "GBK");
?}
?/**
? * 這個(gè)方法使用XMLOutputer將一個(gè)JDom對(duì)象輸出到標(biāo)準(zhǔn)輸出設(shè)備
? *
? * @param myDocument
? *??????????? 將要被輸出的JDom對(duì)象
? * @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);*/
???XMLOutputter outputter = new XMLOutputter("",true,encoding);
???outputter.output(myDocument, System.out);
??} catch (java.io.IOException e) {
???e.printStackTrace();
??}
?}
?/**
? * 這個(gè)方法將JDom對(duì)象轉(zhuǎn)換字符串.
? *
? * @param document
? *??????????? 將要被轉(zhuǎn)換的JDom對(duì)象
? */
?public static String outputToString(Document document) {
??return outputToString(document, "GBK");
?}
?/**
? * 這個(gè)方法將JDom對(duì)象轉(zhuǎn)換字符串.
? *
? * @param document
? *??????????? 將要被轉(zhuǎn)換的JDom對(duì)象
? * @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);*/
??XMLOutputter outputter = new XMLOutputter("",true,encoding);
??try {
???outputter.output(document, byteRep);
??} catch (Exception e) {
??}
??return byteRep.toString();
?}
?/**
? * 這個(gè)方法將List對(duì)象轉(zhuǎn)換字符串.
? *
? * @param document
? *??????????? 將要被轉(zhuǎn)換的JDom對(duì)象
? */
?public static String outputToString(List list) {
??return outputToString(list, "GBK");
?}
?/**
? * 這個(gè)方法將List對(duì)象轉(zhuǎn)換字符串.
? *
? * @param document
? *??????????? 將要被轉(zhuǎn)換的JDom對(duì)象
? * @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);*/
??XMLOutputter outputter = new XMLOutputter("",true,encoding);
??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);
?}
?/**
? * 這個(gè)方法使用XMLOutputter將JDom對(duì)象輸出到文件
? *
? * @param myDocument
? *??????????? 將要輸出的JDom對(duì)象
? * @param filePath
? *??????????? 將要輸出到的磁盤路徑
? */
?public static void outputToFile(Document myDocument, String filePath) {
??outputToFile(myDocument, filePath, "GBK");
?}
?/**
? * 這個(gè)方法使用XMLOutputter將JDom對(duì)象輸出到文件
? *
? * @param myDocument
? *??????????? 將要輸出的JDom對(duì)象
? * @param filePath
? *??????????? 將要輸出到的磁盤路徑
? * @param encoding
? *??????????? 編碼方式
? */
?public static void outputToFile(Document myDocument, String filePath,
???String encoding) {
??//setup this like outputDocument
??try {
???//XMLOutputter outputter = new XMLOutputter(" ", true,encoding);
???/*???XMLOutputter outputter = new XMLOutputter();
???Format fm = Format.getRawFormat();
???fm.setEncoding(encoding);
???outputter.setFormat(fm);*/
???XMLOutputter outputter = new XMLOutputter("",true,encoding);
???//output to a file
???FileWriter writer = new FileWriter(filePath);
???outputter.output(myDocument, writer);
???writer.close();
??} catch (java.io.IOException e) {
???e.printStackTrace();
??}
?}
?/**
? * 這個(gè)方法將JDom對(duì)象通過樣式單轉(zhuǎn)換.
? *
? * @param myDocument
? *??????????? 將要被轉(zhuǎn)換的JDom對(duì)象
? * @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 函數(shù),局部測(cè)試用。
?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"));
??}
?}
}
?