Dom4j解析和處理xml文檔

jopen 12年前發布 | 44K 次閱讀 Dom4j XML操作類庫

本文將介紹
1.如何通過dom4j來對xml文檔進行增、刪、改、查
2.如何從本地讀入xml文檔
3.如何把xml文檔轉換成xml字符串
4.如何把xml輸出以指定的編碼輸出到xml文檔。
5.如何把xml字符串轉換成document。

創建document、添加節點、屬性及注釋

package com.xml.dom4j;

import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter;

import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.XMLWriter;

 /**
  * 創建document
  * @return
  */
public static Document createDomFJ(){
    Document doc =DocumentHelper.createDocument();
    return doc;
}

/**
 * 給文檔添加根節點
 * @param elName 子節點名稱
 * @param doc   文檔
 * @return
 */
public static Element appendChile(String elName,Document doc){
    Element root=doc.addElement(elName);
    return root;
}
/**
 * 給父節點添加子節點
 * @param elName 子節點的名稱
 * @param el  父節點
 * @return
 */
public static Element appendChile(String elName,Element el){
    Element sub=el.addElement(elName);
    return sub;
}
/**
 * 添加子節點及其對應的值
 * @param elName 子節點的名稱
 * @param value   子節點的值
 * @param el     父節點
 */
public static void appendChile(String elName,String value,Element el){
    Element sub=el.addElement(elName);
    sub.setText(value);
}  
/**
 * 根目錄添加注釋
 * @param explain  說明文字
 * @param doc
 */
public static void addCommend(String explain,Document doc){
    doc.addComment(explain);
}
/**
 * 為子節點添加說明
 * @param explain
 * @param element
 */
public static void addCommend(String explain,Element element){
    element.addComment(explain);
}
/**
 * 為節點添加屬性
 * @param attName
 * @param attValue
 * @param element
 */
public static void addAttribute(String attName,String attValue,Element element){
    element.addAttribute(attName, attValue);
}

}</pre>

asXML可以將文檔或元素轉換成一段xml字符串

String docStr=doc.asXML();  //把xml文檔轉換成字符串    
System.out.println("docStr==="+docStr);
String pdsStr=pds.asXML();   //把父節點轉換成字符串
System.out.println("pdsStr=="+pdsStr); 
//結果如插圖所示
</div>

parseText完成將xml字符串轉換成Doc的功能

String pdsStr=<PDS><HEAD><TRNCOD>交易代碼</TRNCOD><LGNNAM>登陸名稱</LGNNAM></HEAD></PDS>;
Document docpds=null;
try {
      docpds=DocumentHelper.parseText(docStr);
      docpds.setXMLEncoding("GBK");
     } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
        }

XMLWriter類可以把文檔寫入到文件中,并設置編碼“GBK”

public class JavaCreateDom4j {
    public static void main(String[] args){
        //引用http://www.blogjava.net/hoojo/archive/2011/08/11/356310.html
        Document doc=createDomFJ();
        doc.addComment("以GBK的編碼");
        Element pds=doc.addElement("PDS");
        /*格式化輸出*/
        org.dom4j.io.OutputFormat format=org.dom4j.io.OutputFormat.createPrettyPrint();//緊縮
        format.setEncoding("GBK");    //設置GBK編碼
        Element head=pds.addElement("HEAD");
        Element trancod=head.addElement("TRNCOD");
        trancod.setText("交易代碼");
        Element lgnnam=head.addElement("LGNNAM");
        lgnnam.setText("登陸名稱");     
        try {
     XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("d:/test/xml/dom4jtest1.xml")),format); 
            writer.write(doc);
           writer.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

遞歸顯示xml文檔內容

//文件格式:
<?xml version="1.0" encoding="GBK"?>
<!--以GBK的編碼-->
<PDS>
  <HEAD>
    <TRNCOD>交易代碼</TRNCOD>
    <LGNNAM>登陸名稱</LGNNAM>
  </HEAD>
  <body>
    <name>張學友</name>
  </body>
</PDS>

=====================================
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;


public class JavaCreateDom4j {
    public static void main(String[] args){
        //讀取xml文檔
        SAXReader saxReader=new SAXReader();
        Document doc=null;
        try {
             doc =saxReader.read(new FileInputStream(new File("d:/test/xml/dom4jtest1.xml")));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         List<Element> listEl=doc.getRootElement().elements();
         print(listEl);
}
 /**
     * 遞歸顯示文檔內容
     * @param els  elements數組
     */
    public static void print(List<Element> els){
        for(Element el:els){
            System.out.println("##"+el.getName()+"--value=="+el.getTextTrim());
            if(el.hasContent()){
                print(el.elements());
            }
        }
    }
//結果見圖”dom4j遍歷xml文檔“
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!