xml解析之dom4j解析

dom4j是一個Java的XML API,類似於jdom,用來讀寫XML文件的。dom4j是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它.
對主流的Java XML API進行的性能、功能和易用性的評測,dom4j無論在那個方面都是非常出色的。如今你可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

myeclipse與eclipse中dom4j的使用
a)導入jar包
1. 找到dom4j-1.6.1.jar 然後複製
2. 在工程中創建文件夾lib
3. 粘貼到lib文件夾
4. 右擊jar文件,build path->add to build path

dom4j解析需要用到dom4j的jar包
在網上找了半天,要在外網下載,對網速有要求,對於沒有耐心的人會很痛苦。。。
我完了會將相關資源上傳到我的百度雲,有需要可以直接下載
留作備份吧
鏈接:https://pan.baidu.com/s/1bQV6mM 密碼:ui3n
如果到期聯繫筆者,無償分享

代碼實現

package xml;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jParser {


    static Element root;
    static List<Element> list=null;
    public static void main(String[] args) {

        //1.創建解析器
        SAXReader reader=new SAXReader();
        //2.獲取文檔模型
        Document doc=null;
        try {
            doc=reader.read("resource/Demo1.xml");
            root=doc.getRootElement();
            list=root.elements("book");

        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        add();
        delete();
        show();
        try {
            save(doc);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //增加
    public static void add(){
        list=root.elements("book");
        for (Element book : list) {


            if("Harry Potter".equals(book.element("title").getText())){

                //這個是設置標籤的屬性。。。
                //book.addElement("desc","好書");
                //下面這個方法是往標籤裏面添加內容
                Element e=book.addElement("desc");
                e.setText("好書");
            }

        }

        for (Element book : list) {

            //System.out.println(book.attributeValue("category"));

            List bookAttList=book.elements();


            if("Harry Potter".equals(book.element("title").getText())){

                /*
                 * 這是獲取內容,前面測試了好久,明明添加節點方法是對的,爲什麼出不來結果。。。
                 * 後來發現是獲取方法錯了,心累
                 * 
                 */

                System.out.println(book.element("desc").getText());;

            }

        }



    }
    //刪除
    public static void delete(){

        //刪除要先刪除該節點的父節點,然後調用方法刪除
        Element theEle=null;

        for (Element e: list) {
            List<Element> sonlist=e.elements();
            for (Element element : sonlist) {
                if("Harry Potter".equals(element.getText())){
                    System.out.println("============");
                    theEle=element;
                    //element.getParent().getParent().remove(element.getParent());
                break;
                }
            }
        }
        /*Element ele=theEle.getParent();
        ele.getParent().remove(ele.getParent());*/
        theEle.getParent().remove(theEle);


    }

    //保存
    public static void save(Document doc) throws IOException{

        /**
         * 將節點寫出到XML文件中去
         * 1:使用轉換流(默認平臺碼),指定編碼集
         * 2:利用XMLWriter
           OutputFormat format = OutputFormat.createPrettyPrint();            
           format.setEncoding("utf-8");       
           XMLWriter writer = new XMLWriter
           (new FileOutputStream("output.xml"),format);
           writer.write(node);
        writer.close();
         */

        XMLWriter writer=new XMLWriter(new FileOutputStream("resource/result.xml"));

        writer.write(doc);

        writer.close();
    }
    //查
    public static void show(){


        for (Element book : list) {

            //System.out.println(book.attributeValue("category"));

            List<Element> bookAttList=book.elements();
            for (Element bookatt : bookAttList) {
                System.out.println(bookatt.getName()+":"+bookatt.getText());
            }



        }


    }
}

關於具體代碼實現,有篇博客寫的很好。
大神的傑作,瞻仰一番

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章