首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

org.w3c.dom document 跟xml 字符串 互转

2013-03-21 
org.w3c.domdocument 和xml 字符串 互转package com.mymhotel.operaimport java.io.Fileimport java.io.

org.w3c.dom document 和xml 字符串 互转

package com.mymhotel.opera;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.StringReader;import java.io.StringWriter;import java.util.Properties;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.xml.sax.InputSource;import org.xml.sax.SAXException;public class DOMUtils {    /**     * 初始化一个空Document对象返回。     *     * @return a Document     */    public static Document newXMLDocument() {        try {            return newDocumentBuilder().newDocument();        } catch (ParserConfigurationException e) {            throw new RuntimeException(e.getMessage());        }    }    /**     * 初始化一个DocumentBuilder     *     * @return a DocumentBuilder     * @throws ParserConfigurationException     */    public static DocumentBuilder newDocumentBuilder()            throws ParserConfigurationException {        return newDocumentBuilderFactory().newDocumentBuilder();    }    /**     * 初始化一个DocumentBuilderFactory     *     * @return a DocumentBuilderFactory     */    public static DocumentBuilderFactory newDocumentBuilderFactory() {        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        dbf.setNamespaceAware(true);        return dbf;    }    /**     * 将传入的一个XML String转换成一个org.w3c.dom.Document对象返回。     *     * @param xmlString     *            一个符合XML规范的字符串表达。     * @return a Document     */    public static Document parseXMLDocument(String xmlString) {        if (xmlString == null) {            throw new IllegalArgumentException();        }        try {            return newDocumentBuilder().parse(                    new InputSource(new StringReader(xmlString)));        } catch (Exception e) {            throw new RuntimeException(e.getMessage());        }    }    /**     * 给定一个输入流,解析为一个org.w3c.dom.Document对象返回。     *     * @param input     * @return a org.w3c.dom.Document     */    public static Document parseXMLDocument(InputStream input) {        if (input == null) {            throw new IllegalArgumentException("参数为null!");        }        try {            return newDocumentBuilder().parse(input);        } catch (Exception e) {            throw new RuntimeException(e.getMessage());        }    }    /**     * 给定一个文件名,获取该文件并解析为一个org.w3c.dom.Document对象返回。     *     * @param fileName     *            待解析文件的文件名     * @return a org.w3c.dom.Document     */    public static Document loadXMLDocumentFromFile(String fileName) {        if (fileName == null) {            throw new IllegalArgumentException("未指定文件名及其物理路径!");        }        try {            return newDocumentBuilder().parse(new File(fileName));        } catch (SAXException e) {            throw new IllegalArgumentException("目标文件(" + fileName                    + ")不能被正确解析为XML!" + e.getMessage());        } catch (IOException e) {            throw new IllegalArgumentException("不能获取目标文件(" + fileName + ")!"                    + e.getMessage());        } catch (ParserConfigurationException e) {            throw new RuntimeException(e.getMessage());        }    }    /*     * 把dom文件转换为xml字符串     */    public static String toStringFromDoc(Document document) {        String result = null;        if (document != null) {            StringWriter strWtr = new StringWriter();            StreamResult strResult = new StreamResult(strWtr);            TransformerFactory tfac = TransformerFactory.newInstance();            try {                javax.xml.transform.Transformer t = tfac.newTransformer();                t.setOutputProperty(OutputKeys.ENCODING, "UTF-8");                t.setOutputProperty(OutputKeys.INDENT, "yes");                t.setOutputProperty(OutputKeys.METHOD, "xml"); // xml, html,                // text                t.setOutputProperty(                        "{http://xml.apache.org/xslt}indent-amount", "4");                t.transform(new DOMSource(document.getDocumentElement()),                        strResult);            } catch (Exception e) {                System.err.println("XML.toString(Document): " + e);            }            result = strResult.getWriter().toString();            try {                strWtr.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return result;    }    /**     * 给定一个节点,将该节点加入新构造的Document中。     *     * @param node     *            a Document node     * @return a new Document     */    public static Document newXMLDocument(Node node) {        Document doc = newXMLDocument();        doc.appendChild(doc.importNode(node, true));        return doc;    }    /**     * 将传入的一个DOM Node对象输出成字符串。如果失败则返回一个空字符串""。     *     * @param node     *            DOM Node 对象。     * @return a XML String from node     */    /*     * public static String toString(Node node) { if (node == null) { throw new     * IllegalArgumentException(); } Transformer transformer = new     * Transformer(); if (transformer != null) { try { StringWriter sw = new     * StringWriter(); transformer .transform(new DOMSource(node), new     * StreamResult(sw)); return sw.toString(); } catch (TransformerException     * te) { throw new RuntimeException(te.getMessage()); } } return ""; }     */    /**     * 将传入的一个DOM Node对象输出成字符串。如果失败则返回一个空字符串""。     *     * @param node     *            DOM Node 对象。     * @return a XML String from node     */    /*     * public static String toString(Node node) { if (node == null) { throw new     * IllegalArgumentException(); } Transformer transformer = new     * Transformer(); if (transformer != null) { try { StringWriter sw = new     * StringWriter(); transformer .transform(new DOMSource(node), new     * StreamResult(sw)); return sw.toString(); } catch (TransformerException     * te) { throw new RuntimeException(te.getMessage()); } } return ""; }     */    /**     * 获取一个Transformer对象,由于使用时都做相同的初始化,所以提取出来作为公共方法。     *     * @return a Transformer encoding gb2312     */    public static Transformer newTransformer() {        try {            Transformer transformer = TransformerFactory.newInstance()                    .newTransformer();            Properties properties = transformer.getOutputProperties();            properties.setProperty(OutputKeys.ENCODING, "gb2312");            properties.setProperty(OutputKeys.METHOD, "xml");            properties.setProperty(OutputKeys.VERSION, "1.0");            properties.setProperty(OutputKeys.INDENT, "no");            transformer.setOutputProperties(properties);            return transformer;        } catch (TransformerConfigurationException tce) {            throw new RuntimeException(tce.getMessage());        }    }    /**     * 返回一段XML表述的错误信息。提示信息的TITLE为:系统错误。之所以使用字符串拼装,主要是这样做一般 不会有异常出现。     *     * @param errMsg     *            提示错误信息     * @return a XML String show err msg     */    /*     * public static String errXMLString(String errMsg) { StringBuffer msg = new     * StringBuffer(100);     * msg.append("<?xml version="1.0" encoding="gb2312" ?>");     * msg.append("<errNode title="系统错误" errMsg="" + errMsg + ""/>"); return     * msg.toString(); }     */    /**     * 返回一段XML表述的错误信息。提示信息的TITLE为:系统错误     *     * @param errMsg     *            提示错误信息     * @param errClass     *            抛出该错误的类,用于提取错误来源信息。     * @return a XML String show err msg     */    /*     * public static String errXMLString(String errMsg, Class errClass) {     * StringBuffer msg = new StringBuffer(100);     * msg.append("<?xml version='1.0' encoding='gb2312' ?>");     * msg.append("<errNode title="     * 系统错误" errMsg=""+ errMsg + "" errSource=""+ errClass.getName()+ ""/>");     *  return msg.toString(); }     */    /**     * 返回一段XML表述的错误信息。     *     * @param title     *            提示的title     * @param errMsg     *            提示错误信息     * @param errClass     *            抛出该错误的类,用于提取错误来源信息。     * @return a XML String show err msg     */    public static String errXMLString(String title, String errMsg,            Class errClass) {        StringBuffer msg = new StringBuffer(100);        msg.append("<?xml version='1.0' encoding='utf-8' ?>");        msg.append("<errNode title=" + title + "errMsg=" + errMsg                + "errSource=" + errClass.getName() + "/>");        return msg.toString();    }}


热点排行