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



        }


    }
}

关于具体代码实现,有篇博客写的很好。
大神的杰作,瞻仰一番

猜你喜欢

转载自blog.csdn.net/wlyang666/article/details/78781858