1. 程式人生 > >org.w3c.dom document 和xml 字串 互轉

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();
    }

}







相關推薦

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; im

org.w3c.dom.Documentorg.dom4j.Document轉化、w3cString轉化、SAXReader等

<一>把String轉化成org.dom4j.Document: ①Document document = DocumentHelper.parseText(messageXml); ②StringReader sr = new StringRe

Java解析HTML到org.w3c.dom.Document,再把Document輸出到檔案。

Document doc = parser.parseHtml(url, httpBody, entryPageUrl, docType); try {

【Java】org.w3c.dom.Document 類方法引用報錯

The method setXmlVersion(String) is undefined for the type Document  開發時我們可能會碰到這樣的問題,它產生的原因是我們實際需要呼叫

rest介面訪問webService soap介面 用XStream javabeanxml

建立javabean ,RequestCommonFPKJ @XStreamAlias("REQUEST_COMMON_FPKJ") public class RequestCommonFPKJ { @XStreamAsAttribute    //子元

Android-圖片base64字串/刪除本地

圖片工具類 package com.example.save_pic_delete; import android.content.ContentResolver; import android.content.ContentUris; import android.content

DataTable Json 字串

#region  DataTable 轉換為Json字串例項方法 /// <summary> /// GetClassTypeJosn 的摘要說明 /// </summary> public class GetClassTypeJosn : IHttpHandler

使用JAXB包實現beanxml

前言 由於專案需要,呼叫第三方介面,介面返回格式為xml格式。遂用上了javax.xml 用於實現Bean和xml互轉 首先我們看看工具類XmlUtil /** * XML轉物件 * * @param xmlStr xml字串

js實現jsonxml

在web工程裡面,可能需要經常使用到xml和web的互轉功能, 在這裡,使用萬惡的百度之後,發現用java實現效率和效果很差,json轉成xml會出現一些類的頭,比如<o>,<array>這類的,找了很多方法都沒有能夠消除 鑑於js對json的良好支

char[]->NSString;char[]->NSData;十六進位制普通字串;NSString轉為utf16格式char[]

char[]->NSSrting char name[32]; NSString *str = [NSString stringWithUTF8String:name]; char

使用org.w3c.dom.*進行XML檔案的解析建立(包括Cdata的解析)

最近在專案中使用org.w3c.dom對xml檔案進行解析,該包對於較小的xml檔案的操作非常簡便,推薦大家在使用。 首先,對於org.w3c.dom.*的包,我們不需要額外去進行引用,在jdk1.6自帶的rt.jar中就包涵該包。 public viod getXMLNo

利用 JDK 自帶的 org.w3c.dom 進行物件, map 與 xml 的互相轉換

利用 JDK 自帶的 org.w3c.dom 進行物件,map 與 xml 的簡單互相轉換, 其中用到了一個工具類 Hutools 下面是hutools的maven依賴 <dependency> <groupId>cn.hutool</groupId> <arti

org.w3c.dom 解析XML檔案 可以解析出節點屬性

xml檔案如下: <smilxmlns="http://www.w3.org/2000/SMIL20/CR/Language"> <head> <layout> <root-layoutheight="100%"width="100%

C# 位元組陣列字串

本章講述:部分資料型別,格式轉換(十六進位制字串和位元組陣列 互轉    位元組陣列和字串 互轉)  public class HexConverter { #region 格式轉換 /// <summary> /// 轉換十六進位制

元件使用總結:使用 JAXB 實現 XML檔案java物件

JAXB JAXB:實現xml和java物件互轉 JAXB是一個業界的標準,實現XML檔案和Java物件的互轉。 JAXB是JDK 的組成部分。我們不需要下載第三方jar包 即可做到輕鬆轉換。 複製程式碼 重要類和介面: ○ JAXBContext類,是應用的入口,用於管理XML/Java繫結資訊。

org.w3c.dom.Element呼叫問題

轉自:https://blog.csdn.net/xhl136461487/article/details/77964546   因為你呼叫的那個方法是jdk下的那個包裡的類,而在web專案裡卻呼叫了J2EE裡的xml-apis.jar下的org.w3c.dom。(實際上要呼

golang基礎學習-字串整型

在golang語言中字串和整數之間的轉換相比PHP有點複雜。剛學習的人,尤其學過PHP,秒級可以搞定的事情, 這裡卻要使用strcov包中函式轉換,orz~~~~。沒辦法入了golang的大門,就要繼續探究下去。 1.字串轉成整型 func Atoi(s strin

JSON字串list集合

谷歌的Gson.jar:         //list轉換為json            Gson gson = new Gson();               List<Person&g

fastJson中常用JSON字串Java物件

1.使用fastJson,首先引入fastJson依賴 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba<

java十六進位制字串字串(支援中文)

*字串轉16進位制 /** * 字串轉換成為16進位制(無需Unicode編碼) * @param str * @return */ public static String s