前面的话 


本文主要讲解有关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解析技术的更多相关文章

  1. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  2. dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程

    *1 dom4j解析器   1)CRUD的含义:CreateReadUpdateDelete增删查改   2)XML解析器有二类,分别是DOM和SAX(simple Api for xml).     ...

  3. xml解析技术

    本文总结Dom,sax解析,  使用Java作为工具解析xml文档. 1 Dom 综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的 ...

  4. Strus2第一次课:dom4j解析xml文档

    xml文本标记语言: 常用于交换数据:独立于操作系统.编程语言数据存储:xml数据配置:灵活性强,可读性高可以使用css样式改变xml样式 xml解析技术:dom解析xml技术: sax解析xml技术 ...

  5. DOM综合案例、SAX解析、StAX解析、DOM4J解析

    今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * ...

  6. XML解析技术研究(一)

      摘要:XML作为过去十年中出现的最流行的技术之一,得到了广泛的应用,而其中XML解析技术是XML应用的关键.本文介绍了XML解析技术的研究动向,分析和比较了4种XML解析技术的优劣,并归纳总结了应 ...

  7. dom4j解析XML的CURD操作

    在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...

  8. Java数据库编程、XML解析技术

    数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...

  9. 源生API解析XML文档与dom4j解析XML文档

    一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...

随机推荐

  1. Linux 信号(一)—— kill 函数

    世事并无好坏之分,全看我们怎么去想.—— 哈姆雷特·第二幕第二景 ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 #include <signal.h ...

  2. JCIP chap3 share objects

    "同步"确保了操作的原子性执行,但它还有其它重要的方面:memory visibility.我们不但要确保当一个线程在使用一个对象的时候,其它线程不能修改这个对象,而且还要保证该线 ...

  3. java jdbc的优化之BeanUtils组件

    1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件. BeanUtils ...

  4. 解读ASP.NET 5 & MVC6系列(8):Session与Caching

    在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了ASP.NET 5中一个可配置的模 ...

  5. [LeetCode] Word Squares 单词平方

    Given a set of words (without duplicates), find all word squares you can build from them. A sequence ...

  6. [LeetCode] Is Subsequence 是子序列

    Given a string s and a string t, check if s is subsequence of t. You may assume that there is only l ...

  7. [LeetCode] Reverse Words in a String II 翻转字符串中的单词之二

    Given an input string, reverse the string word by word. A word is defined as a sequence of non-space ...

  8. bootstrop 日期控件 datepicker被弹出框dialog覆盖的解决办法

    筒子们在使用bootstrap的日期控件(datepicker , 现在官网提供的名称叫 datetimepicker)时可能会遇到如上图的问题这是啥原因造成的呢? 答案很简单时输出的优先级造成的(z ...

  9. C#设计模式(3)——工厂方法模式

    一.概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 二.代码实现 namespace 设计模式之工厂方法模式 { /// <summary&g ...

  10. DDNS动态更新

    /// <summary> /// DnsPod DDNS工具类 /// </summary> public class DDNSToolkit { private stati ...