Dom4J解析技术
前面的话
本文主要讲解有关Dom4j技术和xpath配合下的优化!
目录:
为什么需要Dom4J
DOM4J怎么用
xpath怎么配合DOM4J
一 为什么需要Dom4J
一门技术出现必定是有原因的,一来是解决某方面技术问题,再者可能是优化性能。
xmlDom 简单方便,可以将xml文档以"DOM树"的形式装进内存,节点对象操作元素。但xml数据量较大时,消耗内存也大。sax访问元素方便,不能对元素crud。都是有明显缺点的。
Dom4j的出现,正好优化了xml解析。
Dom4j和xmlDom 从操作上看很相似,可以说只是对应的API不一样。
值得注意的是:
DOM4J不是sun公司自己的产品,所以没有提供服务的jar包,我们可以自己下载DOM4J-API包,里面有API(index-html),jar包等。
二 DOM4J怎么用
准备好示例xml
<?xml version="1.0" encoding="UTF-8"?> <class>
<stu id="SP001">
<name>小刘</name>
<age></age>
<Math></Math>
<English></English>
</stu>
<stu id="sp002">
<name>小明</name>
<age></age>
<Math></Math>
<English></English>
</stu>
<stu id="sp003">
<name>小张</name>
<age></age>
<Math></Math>
<English></English>
</stu>
</class>
(1)访问元素
Element e= document.getRootElement().Element('stu');
Element nameNode= (Element) e.elements("name").get(0); //等价于e.Element('name');
System.out.println( nameNode.getText());//小明
(2)插入元素
Element stuEle=DocumentHelper.createElement("stu");
stuEle.addAttribute("id", "sp003"); //添加属性(id)
Element nameEle=DocumentHelper.createElement("name");
nameEle.setText("宋江");
Element ageEle=DocumentHelper.createElement("age");
ageEle.setText("11");
Element MathEle=DocumentHelper.createElement("Math");
MathEle.setText("100");
//将元素挂到stu上
stuEle.add(nameEle);
stuEle.add(ageEle);
stuEle.add(MathEle);
//刷新,这很重要。
(3)修改
(4)删除
FIND:访问属性时: node.Elements('NodeName'); 里面的元素只能是node的直接子节点,不可以是孙子(包括以后)。也不能根据id,name属性来访问元素。
那么为提高查询效率,需要借助xpath;
三:xpath怎么配合DOM4J
(1)什么是xpath
xpath操作xml有点像sql语言查询数据库的效果,简单的说,xpath是一种查询格式。
示例xml
<?xml version="1.0" encoding="UTF-8"?>
<AAA>
<BBB id="sp001">B1</BBB>
<BBB id="sp002" name="Bbb">
<CCC>C1</CCC>
<AAA>
<BBB>B2</BBB>
</AAA>
<BBB>B3</BBB>
</BBB> </AAA>
看下面xpath配合DOM4j------注意xpath不单独使用
List list=doc.selectNodes("/AAA/BBB"); // "/AAA/BBB"就是xpath格式
System.out.println(list.size()); //2;
//(1)xpath最经典的用法一
Element list1= (Element)doc.selectSingleNode("/AAA/BBB[1]");
// 拿到属性和Text
System.out.println("id||"+list1.attributeValue("id"));
System.out.println("TextContent||"+list1.getText());
// (2)经典用法二
//通过id,name属性选出元素,相等于getElementById("ID");getElementsByTagName()
//取出id=‘sp001’的BBB元素;
Element node= (Element)(doc.selectNodes("//BBB[@id='sp001']").get(0));
System.out.println(node.getText()); //B1;
//取出name属性为"Bbb"的BBB元素
Element n= (Element) doc.selectSingleNode("//BBB[@name='Bbb'][1]");
System.out.println(n.attributeCount()); //2
xpath细节:
(1) "/AAA/BBB"-----AAA下的BBB集合(只是子节点), /有点路径的意思。
再者:"/AAA/BBB[1]"----就是具体指第1个BBB元素(这里的1不是index=0开始的,就是实际上的1).
(2) "//AAA"-----指的是xml中全部AAA元素;
比如:"//AAA/BBB"---父元素是AAA的全部BBB元素集合(List)
(3) "//BBB[@id='sp001']"-----取出id=‘sp001’的BBB元素集合(List)
"//BBB[@name="Bbb"]"-----取出name="Bbb"的元素集合(List)
"//BBB[@id='sp001'][1]''----取出第1个元素
find: 通过xpath的修饰,DOM4J的查询功能就很强大了。适用于大多数情况,一般解析xml文档都是使用它。
Dom4J解析技术的更多相关文章
- XML技术之DOM4J解析器
由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...
- dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程
*1 dom4j解析器 1)CRUD的含义:CreateReadUpdateDelete增删查改 2)XML解析器有二类,分别是DOM和SAX(simple Api for xml). ...
- xml解析技术
本文总结Dom,sax解析, 使用Java作为工具解析xml文档. 1 Dom 综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的 ...
- Strus2第一次课:dom4j解析xml文档
xml文本标记语言: 常用于交换数据:独立于操作系统.编程语言数据存储:xml数据配置:灵活性强,可读性高可以使用css样式改变xml样式 xml解析技术:dom解析xml技术: sax解析xml技术 ...
- DOM综合案例、SAX解析、StAX解析、DOM4J解析
今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * ...
- XML解析技术研究(一)
摘要:XML作为过去十年中出现的最流行的技术之一,得到了广泛的应用,而其中XML解析技术是XML应用的关键.本文介绍了XML解析技术的研究动向,分析和比较了4种XML解析技术的优劣,并归纳总结了应 ...
- dom4j解析XML的CURD操作
在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...
- Java数据库编程、XML解析技术
数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...
随机推荐
- JMM(java内存模型)
What is a memory model, anyway? In multiprocessorsystems, processors generally have one or more laye ...
- 用ORM的思想操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml***……
大家有没有这样的感受,一涉及XML文档操作就得百度一遍.是不是非!常!烦!.各种类型,各种方法,更别提为了找到一个节点多费劲.本来想写个XML操作的工具方法,写了两行一想既然XML文档是有规律的,如果 ...
- Intellij IDEA 一些不为人知的技巧
Intellij IDEA 一些不为人知的技巧 2016/12/06 | 分类: 基础技术 | 0 条评论 | 标签: IntelliJ 分享到:38 原文出处: khotyn 今天又听了 Jetbr ...
- Referenced file contains errors (http://www.springframework.org/schema...错误
Referenced file contains errors (http://www.springframework.org/schema...错误 Referenced file contains ...
- CODE[VS]4633Mz树链剖分练习
Description 给定一棵结点数为n的树,初始点权均为0,有依次q个操作,每次操作有三个参数a,b,c,当a=1时,表示给b号结点到c号结点路径上的所有点(包括b,c,下同)权值都增加1,当a= ...
- java多线程系类:JUC线程池:06之Callable和Future(转)
概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...
- Softreference | WeakReference
转自:http://blog.csdn.net/kavendb/article/details/5935577 本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱 ...
- [LeetCode] Find Leaves of Binary Tree 找二叉树的叶节点
Given a binary tree, find all leaves and then remove those leaves. Then repeat the previous steps un ...
- 如何用Unity创建一个的简单的HoloLens 3D程序
注:本文提到的代码示例下载地址>How to create a Hello World 3D holographic app with Unity 之前我们有讲过一次如何在HoloLens中创建 ...
- 页置换算法FIFO、LRU、OPT
页置换算法FIFO.LRU.OPT 为什么需要页置换 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调 ...