dom4j xml 操作小記

commons-beanutils.jar
commons-collections-3.2.2.jar
commons-lang.jar
commons-logging.jar
dom4j-1.6.1.jar
ezmorph-1.0.5.jar
jaxen-1.1-beta-9.jar
json-lib-2.2-jdk15.jar
junit-4.4.jar
log4j-1.2.15.jar
ojdbc14_11g.jar
xom-1.2.5.jar


import java.io.File;
import java.io.FileWriter;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.xml.XMLSerializer;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class XmlUtil {

    /**
     * 讀取XML文件,獲取Document對象
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param fileName
     * @return Document
     * @throws DocumentException
     * Document
     */
    public static Document getXmlDocumentByFile(String fileName) throws DocumentException{
        SAXReader reader = new SAXReader();
        File file = new File(fileName);
        Document document= reader.read(file);
        return document;
    }

    /**
     * 
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param url
     * @return
     * @throws DocumentException
     * Document
     */
    public static Document getXmlDocumentByURL(URL url) throws DocumentException{
        SAXReader reader = new SAXReader();
        Document document= reader.read(url);
        return document;
    }
    /**
     *  字符串轉換成XML Document對象
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param xmlStringContent
     * @return
     * @throws DocumentException
     * Document
     */
    public static Document getXmlDocumentByCharacterString(String xmlStringContent) throws DocumentException{
        Document document = DocumentHelper.parseText(xmlStringContent);
        return document ;
    }

    /**
     * 將Document對象轉換成String字符串
     * zhenhua920 CreateDate: 2016年5月3日 
     * @param doc
     * @return
     * String
     */
    public static String getStringByDocument(Document doc){
        return doc.asXML();
    }

    /**
     * 
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param doc
     * @return
     * Element
     */
    public static Element getRootElement(Document doc){
        Element result = doc.getRootElement();
        return result;
    }

    /**
     * XML Document 獲取 Element 對象下的指定子 Element 對象
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param src
     * @param elementName
     * @return type is List
     * List<Element>
     */
    @SuppressWarnings("unchecked")
    public static List<Element> getChildNodes(Element src,String elementName){
        List<Element> list = src.elements(elementName);
        return list;
    }
    /**
     * 獲取節點指定的子節點的Text值
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param src
     * @param elementName
     * @return
     * String
     */
    public static String getChildNodeText(Element src,String elementName){
        String result = src.elementText(elementName);
        return result;
    }

    /**
     * XML Document 獲取 Element 對象 下的所有子 Element 對象
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param src
     * @return
     * List<Element>
     */
    @SuppressWarnings("unchecked")
    public static List<Element> getAllChildNodes(Element src){
        List<Element> list = src.elements();
        return list;
    }
    /**
     * 獲取當前節點的值
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param src
     * @return
     * String
     */
    public static String getElementText(Element src){
        String result = src.getTextTrim();
        return result;
    }
    /**
     * 獲取當前節點指定子節點的值
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param src
     * @param childNodeName
     * @return
     * String
     */
    public static String getElementChildNodeText(Element src,String childNodeName){
        String result = src.elementTextTrim(childNodeName); 
        return result;
    }

    @SuppressWarnings("unchecked")
    public static List<Element> getElementByDocumentSelectedNode(Document doc,String nodeName){
        List<Element> result = doc.selectNodes(nodeName);
        return result ;
    }


    /**
     * 創建空文檔
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @return
     * Document
     */
    public Document createDocument(){
        Document doc = DocumentHelper.createDocument();
        return doc;
    }

    // ------------------------寫入XML---------------------------//

    /**
     * 新增節點
     * zhenhua920 CreateDate: 2016年5月3日 
     * @param src
     * @param nodeName
     * @param value
     * void
     */
    public void addElement(Element src,String nodeName,String value){
        src.addElement(nodeName).setText(value);
    }
    /**
     * 插入數據到標籤
     * zhenhua920 CreateDate: 2016年5月3日 
     * @param src
     * @param value
     * void
     */
    public void setElementValue(Element src,String value){
        src.setText(value);
    }

    //設置節點屬性值
    public void setAttribute(Element src,Map<String,Object> attribute){
        for(Entry<String,Object> a: attribute.entrySet()){
            src.addAttribute(a.getKey(), a.getValue().toString());
        }
    }
    //XML文檔轉換成字符串

    /**
     * 
     * Administrator CreateDate: 2015-10-16 com.yinhai.zhenhua.utilXmlUtil.java 
     * @param doc
     * @param fileName
     * @param encoding
     * void
     * @throws Exception 
     */
    public static void buildXmlFile(Document doc, String fileName, String encoding) throws Exception {
        try {
            //創建一個java.io包中的fileWriter對象,指定目標文件
            FileWriter fw = new FileWriter(fileName);
            //制定XML文件的輸出格式
            OutputFormat format = OutputFormat.createPrettyPrint();
            if(encoding==null || encoding == ""){
                encoding = "UTF-8";
            }
            format.setEncoding(encoding);
            //寫出xml文件到操作系統
            XMLWriter xmlWriter = new XMLWriter(fw,format);
            xmlWriter.write(doc);
            xmlWriter.close();
        } catch (Exception e) {
            throw new Exception("創建XML文件失敗,文件名稱:" + fileName);
        }
    }
    /**
     * 將Document 轉換成 byte[]
     * @param doc
     * @param encoding
     * @return
     * @throws Exception
     */
    public static byte[] buildXml(Document doc,String encoding) throws Exception {
        try {
            ByteArrayOutputStream  memoryBuff = new ByteArrayOutputStream();
            OutputStreamWriter fw = new OutputStreamWriter(memoryBuff);
            //制定XML文件的輸出格式
            OutputFormat format = OutputFormat.createPrettyPrint();
            if(encoding==null || encoding == ""){
                encoding = "UTF-8";
            }
            format.setEncoding(encoding);
            //寫出xml文件到操作系統
            XMLWriter xmlWriter = new XMLWriter(fw,format);
            xmlWriter.write(doc);
            xmlWriter.close();
            return memoryBuff.toByteArray();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
    /**
     * 使用dom4j,json的jar包 將XML轉換爲JSON
     * zhenhua920 CreateDate: 2016年5月3日 
     * @param Element rootElement dom4j的節點對象
     * void
     */
    public static String convertXMLToJSON(Element rootElement){
        /*
         * 1,遞歸遍歷節點
         * 2,創建JSON對象
         * 3,將遍歷得到的節點信息加入到JSON對象當中
         * 4,將JSON字符串返回
         */
        Iterator<Element> rootIt = rootElement.elementIterator();
        if(rootIt.hasNext()){
            JSONArray jarray = new JSONArray();
            while(rootIt.hasNext()){
                JSONObject obj = new JSONObject(); 
                Element e = rootIt.next();
                obj.accumulate(e.getName(), convertXMLToJSON(e));
                jarray.add(obj);
            }
            return jarray.toString();
        }else{
            JSONObject obj = new JSONObject();
            obj.accumulate(rootElement.getName(), rootElement.getTextTrim());
            return obj.toString();
        }

    }

    /**
     * 將JSON轉換成 XML
     * zhenhua920 CreateDate: 2016年5月3日 
     * @param json
     * @return
     * String
     */
    public static Element convertJSONToXML(String json){
        //TODO
        //XMLSerializer serializer = new XMLSerializer();  

        JSON jsonObject = JSONSerializer.toJSON(json); 
        System.out.println(jsonObject);
        if(!jsonObject.isEmpty()){
            if(jsonObject.isArray()){
                Document doc = DocumentHelper.createDocument();
                JSONArray arr = JSONArray.fromObject(jsonObject.toString());
                for(int i=0;i<arr.size();i++){
                    JSON js= JSONSerializer.toJSON(arr.get(i));

                }
            }else{
                Document doc = DocumentHelper.createDocument();
                JSONObject js = JSONObject.fromObject(jsonObject.toString());
                for(Iterator<String> it = js.keySet().iterator();it.hasNext();){
                    String key = it.next();
                    String value = js.getString(key);
                    doc.addElement(key).setText(value);
                }
                return doc.getRootElement();
            }
        }
        return null;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章