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.*;
/**
* 这个类提供一些 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对象输出到标准输出设备,使用 GBK 编码
*
* @param myDocument
* 将要被输出的JDom对象
*/
public static void outputToStdout(Document myDocument) {
outputToStdout(myDocument, "GBK");
}
/**
* 这个方法使用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);*/
XMLOutputter outputter = new XMLOutputter("",true,encoding);
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, "GBK");
}
/**
* 这个方法将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);*/
XMLOutputter outputter = new XMLOutputter("",true,encoding);
try {
outputter.output(document, byteRep);
} catch (Exception e) {
}
return byteRep.toString();
}
/**
* 这个方法将List对象转换字符串.
*
* @param document
* 将要被转换的JDom对象
*/
public static String outputToString(List list) {
return outputToString(list, "GBK");
}
/**
* 这个方法将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);*/
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);
}
/**
* 这个方法使用XMLOutputter将JDom对象输出到文件
*
* @param myDocument
* 将要输出的JDom对象
* @param filePath
* 将要输出到的磁盘路径
*/
public static void outputToFile(Document myDocument, String filePath) {
outputToFile(myDocument, filePath, "GBK");
}
/**
* 这个方法使用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(" ", 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();
}
}
/**
* 这个方法将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"));
}
}
}