Dom4J5分钟入门Dom4j使用

Dom4j使用

首先我们来了解下目前主流的四种解析xml的技术

  • DOM解析
  优点:
      1.形成了树结构,有助于更好的理解、掌握,且代码容易编写。
      2.解析过程中,树结构保存在内存中,方便修改。
 缺点:
   1、由于文件是一次性读取,所以对内存的耗费比较大。
   2、如果XML文件比较大,容易影响解析性能且可能会造成内存溢出
  • SAX解析
优点:
   1. 采用事件驱动模式,对内存耗费比较小。
   2. 适用于只处理XML文件中的数据时。
缺点:
   1. 编码比较麻烦。
   2. 很难同时访问XML文件中的多处不同数据
  • JDOM解析
优点:
        1是基于树的处理XML的Java API,把树加载在内存中
        2没有向下兼容的限制,因此比DOM简单
        3速度快,缺陷少
        4具有SAX的JAVA规则
    缺点:
        1不能处理大于内存的文档
        2JDOM表示XML文档逻辑模型。不能保证每个字节真正变换。
        3针对实例文档不提供DTD与模式的任何实际模型。
        4不支持与DOM中相应遍历包

今天的主角Dom4j

特征   
     1、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。
     2、它使用接口和抽象基本类方法。
     3、具有性能优异、灵活性好、功能强大和极端易用的特点。

pom

       <dependency>  
        <groupId>dom4j</groupId>  
        <artifactId>dom4j</artifactId>  
        <version>1.6.1</version>  
    </dependency> 

接下来我们来了解下Dom4j的常用API,要想深入了解DOM4J API,请进入传送门

从DOM4J的API可以迅速的上手

总览

废话不多说,开始Demo ps:这是字符串形式的XML

String XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<response><status>1</status><info>OK</info><infocode>10000</infocode><regeocode><formatted_address>XXX省XXX市XXX区XXX处</formatted_address><addressComponent><country>中国</country><province>XXX省</province><city>XXX市</city><citycode>0791</citycode><district>XXX区</district><adcode>360111</adcode><township>XXX处</township><towncode>360111482000</towncode><neighborhood><name></name><type></type></neighborhood><building><name></name><type></type></building><streetNumber><street></street><number></number><direction></direction><distance></distance></streetNumber><businessAreas type=\"list\"><businessArea/></businessAreas></addressComponent><pois type=\"list\"/><roads type=\"list\"/><roadinters type=\"list\"/><aois type=\"list\"/></regeocode></response>";


public String toSub(String str) throws DocumentException {
    Document doc = DocumentHelper.parseText(str) ;//从字符串中读取xml
    Element rootElt = doc.getRootElement(); // 获取根节点
    List first = rootElt.elements();
    for (Iterator<?> its = first.iterator(); its.hasNext();) {
        Element e = (Element) its.next();
        List   second = e.elements();
        for (Iterator<?> it = second.iterator(); it.hasNext();) {
            Element t = (Element) it.next();
            return t.getText() ;
        }
    }
    return null ;
}

//从本地加载采用
 Document document = saxReader.read(new File("src/fileName.xml"));  
    Element ele = document.getRootElement(); 

运行这个Demo,可以让你对Dom4j有初步的熟悉 针对各个接口的详细使用,推荐一篇博文传送门

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

Java 实现线程死锁

Java 实现线程死锁 概述 春节的时候去面试了一家公司,笔试题里面有一道是使用简单的代码实现线程的‘死锁’,当时没有想到这道题考的是Synchronized关...

2546
来自专栏猿人谷

腾讯2013年实习生笔试题目(附答案)

下面是我在参加2013年腾讯实习生招聘的笔试题目,当然啦,我个人不可能是完全的记住所有题目,部分是摘自网络的。同时,下面也有一些题目我不会的,希望大家一起商量解...

3888
来自专栏PHP在线

48条高效率的PHP优化写法

1 字符串 1.1 少用正则表达式 能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率高于正则。 没得说,正则最耗性能。 str_...

71410
来自专栏nnngu

经典Java面试题收集

1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象...

5026
来自专栏程序员宝库

48 条高效率的 PHP 优化写法

能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率高于正则。

2504
来自专栏用户2442861的专栏

JavaScript Promise

在callback的模型里边,我们假设需要执行一个异步队列,代码看起来可能像这样:

1272
来自专栏LuckQI

redis初识~String命令介绍

1243
来自专栏微信终端开发团队的专栏

C# 内存管理机制及 WP 内存泄漏定位方法

C#内存管理机制及WP内存泄漏定位方法 一、C#的内存管理机制 1. 托管资源与非托管资源 什么是托管资源?托管资源通俗的理解就是,把资源交给.net去管理,这...

4247
来自专栏喔家ArchiSelf

全栈必备 Java基础

那一年,从北邮毕业,同一年,在大洋的彼岸诞生了一门对软件业将产生重大影响的编程语言,它就是——Java。1998年的时候,开始学习Java1.2,并在Java ...

1154
来自专栏PHP在线

PHP底层的运行机制与原理

PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。 PHP是一种适用于web开发的动态语言。具体点说,就是一个用C语言实...

1.2K6

扫码关注云+社区

领取腾讯云代金券