前面的话 


本文主要讲解有关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. pitch yaw roll是什么

    虚拟现实 三维空间的右手笛卡尔坐标如图1所示. 图1 在航空中,pitch, yaw, roll如图2所示. pitch是围绕X轴旋转,也叫做俯仰角,如图3所示. yaw是围绕Y轴旋转,也叫偏航角,如 ...

  2. [转].net core 通过ViewComponent封装控件 左侧菜单

    本文转自:http://www.cnblogs.com/BenDan2002/p/6224816.html 我们在.net core中还使用了ViewComponent方式生成控件.ViewCompo ...

  3. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译

    本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 相关文章: ...

  4. java jdbc的优化之BeanUtils组件

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

  5. java数组

    1.java是否可以像c一次样搞个不定长数组? 不可以那样写,那样写是非法的.数组构造的时候必须指定长度,因为JVM要知道需要在堆上分配多少空间.也就是要初始化数组的话让JVM知道要给数组分配多少空间 ...

  6. 虚拟机上装uoj

    前期准备: x64 ubuntu 镜像.vmware.ss账号 注意一定要有64位镜像! ss不是必须的,不过没有的话就等着下载一晚上吧... 首先先装好ubuntu,我装的是ubuntu-16.04 ...

  7. [LeetCode] Majority Element 求众数

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  8. [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表

    A linked list is given such that each node contains an additional random pointer which could point t ...

  9. FPGA与simulink联合实时环路系列——实验二LED

    实验二LED 实验内容 在实验一的基础上,将simulink产生的测试信号输出到FPGA开发板上的LED灯进行显示,这里要在生成的硬件模型上进行修改,将传送到FPGA的信号输出到8个LED灯上,并且对 ...

  10. 红豆电信JS

    http://www.hodo170.com/login.jsp 先定义window,再定义RSAUtils=window.RSAUtils || a.RSAUtils; /* * RSA, a su ...