博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dom4J两种节点添加方法比较
阅读量:5277 次
发布时间:2019-06-14

本文共 3223 字,大约阅读时间需要 10 分钟。

Dom4J中,给一个已存在的节点添加子节点的方法有两种:

通过DocumentFactory得到Element然后通过父节点的add(Element elem)方法添加,

通过Element ielem= Element.addElement(String QName);方法来添加:

 

public static void DocumentTest(){

        org.dom4j.DocumentFactory DocumentFactory = new org.dom4j.DocumentFactory();

       

        org.dom4j.Element root = DocumentFactory.createElement("Books");

        Element book=DocumentFactory.createElement("Book");

        book.setText("The Road Ahead");

        for(int i=0;i<10;i++){

            book.addAttribute("ISBN", "ITCP:0WESAS"+i);

            root.add(book);

            //root.add((Element)book.clone());

        }

        System.out.println(root.asXML());

    }

    public static void DocumentTest2(){

        org.dom4j.DocumentFactory DocumentFactory = new org.dom4j.DocumentFactory();

       

        org.dom4j.Element root = DocumentFactory.createElement("Books");

        for(int i=0;i<10;i++){

            Element book=null;

            book=root.addElement("book");

            book.setText("The Road Ahead");

            book.addAttribute("ISBN", "ITCP:0WESAS"+i);

            //root.add(book);

        }

        System.out.println(root.asXML());

    }

    public static void main(String[] args){

        DocumentTest();

    }

 

 

两种方法都是非常经典的方法,但是执行DocumentTest()方法,会出现org.dom4j.IllegalAddException 异常,要解决这个异常,也很容易,我们可以使用类Elementclone()方法(继承自Object类)得到该Element的一个副本,副本的含义,是:

要同时使对于任何对象 x,表达式:

x.clone() != x

为 true,表达式:

x.clone().getClass() == x.getClass()

也为 true,但这些并非必须要满足的要求。一般情况下:

x.clone().equals(x)

true,但这并非必须要满足的要求。

成立。

Dom4j 中,在给一个元素添加

 

所有,就业务需要来说,用两种方式都是可以的,但是,他们的执行效率一样吗?

public static int index=10;

    public static long DocumentTest(){

        //DefaultElement df=new DefaultElement();

        java.util.Date time1=new java.util.Date();

        org.dom4j.DocumentFactory DocumentFactory = new org.dom4j.DocumentFactory();

       

        org.dom4j.Element root = DocumentFactory.createElement("Books");

        Element book=DocumentFactory.createElement("Book");

        book.setText("The Road Ahead");

        for(int i=0;i<index;i++){

            book.addAttribute("ISBN", "ITCP:0WESAS"+i);

            root.add((Element)book.clone());

        }

        java.util.Date time2=new java.util.Date();

        System.out.println("方法一执行时间"+(time2.getTime()-time1.getTime())+"ms");

        return time2.getTime()-time1.getTime();

        //System.out.println(root.asXML());

    }

 

    public static long DocumentTest2(){

        org.dom4j.DocumentFactory DocumentFactory = new org.dom4j.DocumentFactory();

        java.util.Date time1=new java.util.Date();

        org.dom4j.Element root = DocumentFactory.createElement("Books");

        for(int i=0;i<index;i++){

            Element book=null;

            book=root.addElement("book");

            book.setText("The Road Ahead");

            book.addAttribute("ISBN", "ITCP:0WESAS"+i);

            //root.add(book);

        }

        java.util.Date time2=new java.util.Date();

       

        System.out.println("方法二执行时间"+(time2.getTime()-time1.getTime())+"ms");

        return time2.getTime()-time1.getTime();

 

        //System.out.println(root.asXML());

    }

    public static void main(String[] args){

        index=10;

        for(index=10;index<=100000;index=index*10){

            System.out.println("节点大小:"+index);

            DocumentTest();

            DocumentTest2();

            //double per=DocumentTest()/DocumentTest2();

            //System.out.println("时间对比:"+per);

            ;

            //DocumentTest2();

        }

       

       

    }

我们通过上述代码来检查一下执行时间,运行结果如下:

 

节点大小:10

方法一执行时间33ms

方法二执行时间0ms

节点大小:100

方法一执行时间0ms

方法二执行时间0ms

节点大小:1000

方法一执行时间0ms

方法二执行时间0ms

节点大小:10000

方法一执行时间15ms

方法二执行时间63ms

节点大小:100000

方法一执行时间265ms

方法二执行时间327ms

 

 

两个方法的内存开销并没用本质区别,都需要创建相应数量的对象,但是,在节点数较少的情况下,时间开销相差非常可观,在节点数比较多的情况下,方法一时间开销也始终优于方法二。

转载于:https://www.cnblogs.com/MicroGoogle/archive/2011/12/13/2286616.html

你可能感兴趣的文章
P1903 [国家集训队]数颜色 / 维护队列
查看>>
js 对象和Json的转换,js及深度复制
查看>>
【0805作业】模拟多人爬山
查看>>
window.setTimeout() 和 window.setInterval() 使用说明
查看>>
大数据组件
查看>>
ActionResult的其它返回值
查看>>
Mac零散小技巧
查看>>
#135. 二维树状数组 3:区间修改,区间查询
查看>>
js String方法集合
查看>>
Python--day6
查看>>
UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
查看>>
第六天
查看>>
js 格式化带时区的日期
查看>>
XidianOJ 1037 倍流畅序列
查看>>
iOS-矩阵操作
查看>>
CSS中隐藏内容的3种方法及属性值
查看>>
每天一个linux命令(1):ls命令
查看>>
根据xml生成相应的对象类
查看>>
查看ASP.NET : ViewState
查看>>
移动WEB前端开发资源整合
查看>>