Dom4J两种节点添加方法比较
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 异常,要解决这个异常,也很容易,我们可以使用类Element的clone()方法(继承自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
Dom4J两种节点添加方法比较相关推荐
- 史上最容易理解————GET和POST两种基本请求方法的区别
GET和POST两种基本请求方法的区别 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过req ...
- js两种拼接字符串方法
js两种拼接字符串方法 function(msgArr) {//参数为一个数组,每一个对象为图片id和图片地址var len = msgArr.length;//第一种拼接方式,直接用"+& ...
- R中两种常用并行方法——2. snowfall
上一篇博客(R中两种常用并行方法--1. parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定.很多时候我们将大量的计算任务挂 ...
- PDF怎么编辑修改内容?分享两种编辑修改方法
PDF文件怎么编辑修改内容呢?PDF格式的文件是大家在工作中经常会使用到的,可以用来发送文件.阅读文件或者是保存文件.相信大家在阅读使用的时候,肯定有过需要编辑修改文件内容的需求,因为当我们发现文件中 ...
- 两种 HTTP 请求方法
两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST. GET - 从指定的资源请求数据. POST - 向指定的资源提交 ...
- matlab 遍历每个像素点,Mat中两种像素遍历方法比较
小白,入门中,不足其指正.刚刚接触opencv,从一个Matlab风格的编程环境突然跳转到C++,实在有些不适.单就pixels scanning花了好长时间研究.opencv-tutorials给出 ...
- Hbase表两种数据备份方法-导入和导出示例
Hbase表两种数据备份方法-导入和导出示例 本文将提供两种备份方法 -- 1) 基于Hbase提供的类对hbase中某张表进行备份 2) 基于Hbase snapshot数据快速备份方法 场合:由于 ...
- 在iPhone或iPad上设置闹钟的两种最快方法
If you often create or toggle alarms on your iPhone or iPad, there are two quick ways to do it witho ...
- GET和POST两种基本请求方法的区别
GET和POST两种基本请求方法的区别 回退 回退时无害 会再次提交请求 记录 URL可被记录, 用于再访问 不可以 缓存 主动缓存 可手动设置 编码方式 只进行url编码 多种编码方式 参数长度 有 ...
最新文章
- asp.net分页控件使用详解【附实例下载】
- C#中如何将光标定位在某个控件中?
- Acwing第 6 场周赛【未完结】
- Linux Diff命令用法
- 79. Word Search 单词搜索
- java json返回null_java-JSON jsonObject.optString()返回字符串“ null”
- Atitit 演讲常用肢体语言与手势总结 目录 1. 原则 ,哑语一样,手势不只是补充。。。	1 2. 比拟实际物体与抽象物体	1 2.1. 三个实用的手势:	1 2.2. (五)、演讲中忌讳的动作
- 苹果平板爱思助手检验安兔兔
- 关于C#GB2312编码问题
- 苹果电脑表格取消自动计算机,苹果电脑excel序列被隐藏怎么办
- 图片边框变圆圈html,css如何设置边框的圆角样式?border-radius属性设置圆角样式(图 文)...
- ASP.NET中,HiddenField隐藏控件的用法
- 怎么用计算机打出黑人,电脑上怎么打法文
- python图中图_【python】matplotlib数据可视化(7)——图中图
- web上传图片到七牛云服务器
- 计算机网络安全漫画图片,安全教育漫画图片
- 当Mac电脑遇到ANDROID_NDK_HOME not defined...报错
- 上升了百分之几怎么算_上涨百分之多少怎么算
- TTL肖特基触发器是什么?
- 安装(解密)win10 10074 esd 更新 10162 esd
热门文章
- JZOJ 5266. number
- html中插人视频教程,HTML中插入视频并兼容所有浏览器
- 世界地图20亿像素_高通骁龙690 5G平台发布,支持1.92亿像素性能提升20%
- [转载]出了国才明白的10件事~(MITBBS ZT)
- CVPR 2018 Siam-RPN:《High Performance Visual Tracking with Siamese Region Proposal Network》论文笔记
- Codeforces 1149 题解
- matlab中欠定方程组超定方程组_七年级下册第10章:解二元一次方程组(12课时)...
- log4j - 日志
- 求最大整数及其最小下标
- 【django之权限组件】