jdom處理的XML Document 和String 之間的相互轉化
阿新 • • 發佈:2019-02-09
package util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; import java.io.StringReader; import org.jdom.Document; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * JDOM 方式操作XML * * @author Watson Xu * @date 2011-5-3 下午02:20:49 */ public class OperationXMLByJdom { /** * DOCUMENT格式化輸出儲存為XML * * @param doc JDOM的Document * @param filePath 輸出檔案路徑 * @throws Exception */ public static void doc2XML(Document doc, String filePath) throws Exception{ Format format = Format.getCompactFormat(); format.setEncoding("UTF-8"); //設定XML檔案的字元為UTF-8 format.setIndent(" ");//設定縮排 XMLOutputter outputter = new XMLOutputter(format);//定義輸出 ,在元素後換行,每一層元素縮排四格 FileWriter writer = new FileWriter(filePath);//輸出流 outputter.output(doc, writer); writer.close(); } /** * 字串轉換為DOCUMENT * * @param xmlStr 字串 * @return doc JDOM的Document * @throws Exception */ public static Document string2Doc(String xmlStr) throws Exception { java.io.Reader in = new StringReader(xmlStr); Document doc = (new SAXBuilder()).build(in); return doc; } /** * Document轉換為字串 * * @param xmlFilePath XML檔案路徑 * @return xmlStr 字串 * @throws Exception */ public static String doc2String(Document doc) throws Exception { Format format = Format.getPrettyFormat(); format.setEncoding("UTF-8");// 設定xml檔案的字元為UTF-8,解決中文問題 XMLOutputter xmlout = new XMLOutputter(format); ByteArrayOutputStream bo = new ByteArrayOutputStream(); xmlout.output(doc, bo); return bo.toString(); } /** * XML轉換為Document * * @param xmlFilePath XML檔案路徑 * @return doc Document物件 * @throws Exception */ public static Document xml2Doc(String xmlFilePath) throws Exception { File file = new File(xmlFilePath); return (new SAXBuilder()).build(file); } public static void main(String[] args) { try{ Document doc = xml2Doc("test.xml"); System.out.println(doc); System.out.println(doc2String(doc)); doc = string2Doc(doc2String(doc)); doc2XML(doc, "1.xml"); } catch (Exception e) { e.printStackTrace(); } } }