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可以传输数据,也可 ...
随机推荐
- [原创]最近使用React-Native的适配问题和警告搜集
主要记录一下最近使用RN 0.29.2版本遇到的适配的坑以及部分警告的解法. 适配类: 安卓输入框圆角.边框颜色.粗细等无法设置成功,需要在TextInput外面新增一个View设置圆角,TextIn ...
- [转载]Web前端开发工程师编程能力飞升之路
[背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着提高之路,看这篇文章吧:如果你是四五年的前端开发高手,没有难题能难得住你的 ...
- 侯捷老师C++大系之C++面向对象开发:(一)不带指针的类:Complex复数类的实现过程
一.笔记1.C++编程简介 2.头文件与类的声明 防卫式声明#ifndef __COMPLEX__#define __COMPLEX__ …… #endif头文件的布局模板简介template< ...
- 利用HttpWebRequest实现实体对象的上传
一 简介 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对 ...
- 时间格式转换—将后台返回的/Date(1448954018000)/格式转换为正常的时间格式
用JS实现方法: function ChangeDateFormat(cellval) { )); < ? ) : date.getMonth() + ; ? " + date.get ...
- VUE---Missing space before function parentheses
解决方法:
- vue.js 第二课
实现响应的数据绑定和组合的视图组件. 让数据与Dom保持同步 . 在使用jq手工操作DOM时,我们的代码常常是命令式的.重复的.易错的.Vue.js拥抱数据驱动的视图概念.简单的讲,它意味着我们在普通 ...
- consolel API大全-附测试结果
f 简介: JS中默认没有console对象, 这是某些浏览器提供的浏览器内置对象, 低版本IE就没有, 其他主流浏览器应该都有.它能看到结构话的东西,如果是alert,淡出一个对象就是[object ...
- Linux编译工具:gcc入门
1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器.最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还 ...
- PHP build notes - WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 3.0, min: 204, excluded: 3.0).
WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 3.0, ...