利用JAXP和DOM4J解析XML

前言

原创文章欢迎转载,请保留出处。
若有任何疑问建议,欢迎回复。
邮箱:[email protected]

解析XML主要有两种思想,一种是SAX(Simple API for XML),另一种是DOM(文档对象模型),其中在J2EE中,提供了JAXP来实现这两种解析,本文主要利用JAXP实现SAX解析,同时介绍时下流行的DOM4J实现DOM解析。


SAX解析和DOM解析比较

  • SAX解析

    • 优点:效率高,当遇到大的XML文件时,不需要扫描完文件就可以操作。
    • 缺点:不能进行RUD操作,每次操作都要重新解析
  • DOM解析
    • 优点:只需要解析一次XML
    • 缺点:解析完成才能操作,遇到大的XML文件时耗内存。

JAXP实现SAX解析

首先要有一个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<测试><作者>maxwell_nc</作者><博客>http://blog.csdn.net/maxwell_nc</博客></测试>

引用一张经典图来说明SAX解析

接下来写代码:

package maxwell;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class SaxPaserDemo {

    public static void main(String[] args) throws Exception {
        //获取SAX解析器工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //通过工厂获取SAX解析器
        SAXParser parser = factory.newSAXParser();
        //获取XML阅读器
        XMLReader reader = parser.getXMLReader();
        //关联事件解析器
        reader.setContentHandler(new MyContentHandler());
        //解析XML文件
        reader.parse("src/maxwell/demo.xml");
    }

}

/*DefaultHandler是ContentHandler接口适配器*/
class MyContentHandler extends DefaultHandler{
    @Override
    public void startDocument() throws SAXException {
        // 扫描到xml文档开始
        System.out.println("xml解析开始");
    }

    @Override
    public void endDocument() throws SAXException {
        // 扫描到xml文档结束
        System.out.println("xml解析结束");
    }

    @Override
    public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
        // 发现开始标签,打印标签名
        System.out.println("<"+name+">");
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // 打印标签体
        System.out.println(new String(ch, start, length));
    }
}

利用DOM4J实现DOM解析

SAX解析最大缺点就是不能RUD,而DOM可以,无奈本身JAXP的性能低下,所以现在流行使用DOM4J解析XML。

利用DOM4J来解析XML,代码实现上更加简单简洁。

package maxwell;

import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jDemo {

    public static void main(String[] args) throws Exception {
        //利用dom4j获取XML阅读器
        SAXReader reader = new SAXReader();
        //获取document对象
        Document document = reader.read("src/maxwell/demo.xml");
        //获取根节点对象
        Element root = document.getRootElement();

        //打印标签体
        System.out.println(root.element("作者").getText());
        System.out.println(root.element("博客").getText());

        //添加节点并添加属性,设置标签体
        Element newEle = DocumentHelper.createElement("添加节点");
        newEle.addAttribute("测试", "test");
        newEle.setText("测试dom4j的添加节点功能");
        root.add(newEle);

        //写回文件
        XMLWriter writer  = new XMLWriter(new FileOutputStream("src/maxwell/demo.xml"),OutputFormat.createPrettyPrint());
        writer.write(document);
        writer.close();
    }

}

而且带有美化输出的功能,修改后:


总结

实际上无论JAXP还是DOM4J都支持DOM和SAX解析,但DOM4J操作都非常简单,而且性能要比JAXP强大,但要注意,要使用DOM4J必须导入jar文件。

时间: 2024-08-05 22:05:32

利用JAXP和DOM4J解析XML的相关文章

在java项目中怎样利用Dom4j解析XML文件获取数据

在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进行直接读取,能够说这是程序中直接封装好的,包含配置文件里书写的格式等等.那么,假设.想要在配置文件里写一些其它的数据,直接以XML文件的格式进行书写.这个时候在后台怎样读取XML文件里的数据呢?这里利用Dom4j来解析XML文件里连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

在java项目中如何利用Dom4j解析XML文件获取数据

在以前的学习.net时经常会遇到利用配置文件来解决项目中一些需要经常变换的数据,比如数据库的连接字符串儿等.这个时候在读取配置文件的时候,我们通常会用到一个雷configuration,通过这个类来进行直接读取,可以说这是程序中直接封装好的,包括配置文件中书写的格式等等.那么,如果,想要在配置文件中写一些其他的数据,直接以XML文件的格式进行书写,这个时候在后台如何读取XML文件中的数据呢?这里利用Dom4j来解析XML文件中连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

XML学习笔记(五):使用 jdom和dom4j 解析XML

XML解析的详细分析与jaxp解析XML详见:XML学习笔记(四):使用 DOM和SAX 解析XML 一.JDom 1.创建XML文件: 1)Document类即代表整个XML文档,把生成的 Document 利用 XMLOutputter 类输出即可. 2)映射关系:元素:Element:属性:Attribute:注解:Comment:文本信息:Text: 3)注意:addContent()是追加,setContent()会覆盖. /** * 创建XML * * @throws IOExcep

dom4j解析xml字符串实例

与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml.dom4j是一套开源的api.实际项目中,往往选择dom4j来作为解析xml的利器. 先来看看dom4j中对应XML的DOM树建立的继承关系 针对于XML标准定义,对应于图2-1列出的内容,dom4j提供了以下实现: 同时,dom4j的NodeType枚举实现了XML规范中定义的node类型.如此可以在遍历x

java dom4j解析xml实例(2)

java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar(如果不导入这个架包程序可以执行出结果,但最后会报异常) 将相关jar包引入后,实际解析操作如下:  1.要解析的xml文件province.xml: <china dn="d

【java项目实战】dom4j解析xml文件,连接Oracle数据库

简介 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方,我们还是看一下官方给出的解释.如下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT等语言的库.它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP等编程标准. 特点 dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用的特点,同时它也是一个开放源代码的软件.如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例

dom4j解析XML的CURD操作

在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整个XML文件读到内容,形成一个倒状的树形结构. SAX是一个一个的将XML文件中的元素加载的内存,不会形成一个倒状的树形结构. 常用dom4j的api: 主要使用到SAXReader类 SAXReader:表示DOM4J解析器 saxReader.read():加载需要解析的xml文件,返回docu

【学习笔记】关于DOM4J:使用DOM4J解析XML文档

一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org.dom4j这个包里定义: 二.DOM4J的接口 Attribute:定义了XML的属性: Branch:是能够包含子节点的节点,如XML元素(Element)和文档(Documents)定义了一个公共的行为: CDATA:定义了XML的CDATA区域: CharacterData:是一个标识接口,标

java dom4j解析xml实例

java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar(如果不导入这个架包程序可以执行出结果,但最后会报异常) 将相关jar包引入后,实际解析操作如下:  1.要解析的xml文件data.xml: <?xml version="1