java xml Dom4j

java Dom4j

概述

dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。

dom4j使Java生成和解析XML灵活性变高,并且代码易于维护

特点

1、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。

2、它使用接口和抽象基本类方法。

3、具有性能优异、灵活性好、功能强大和极端易用的特点。

4、是一个开放源码的文件

Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。然而他自己带的指南只有短短一页(html),不过说的到健全。国内的中文资料很少。因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法,如需深入的使用,请……自己摸索或查找别的资料。

之前看过IBM developer社区的文章(参见附录),提到一些XML解析包的性能比较,其中DOM4J的性能非常出色,在多项测试中名列前茅。(事实上DOM4J的官方文档中也引用了这个比较)所以这次的项目中我采用了DOM4J作为XML解析工具。

在国内比较流行的是使用JDOM作为解析器,两者各擅其长,但DOM4J最大的特色是使用大量的接口,这也是它被认为比JDOM灵活的主要原因。大师不是说过么,“面向接口编程”。使用DOM4J的已经越来越多。如果你善于使用JDOM,不妨继续用下去,只看看本篇文章作为了解与比较,如果你正要采用一种解析器,不如就用DOM4J吧。

常用类

 <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.1</version>
        </dependency>

Document:表示xml文档信息,是一个树形结构

Eelment:表示xml的元素结点,提供一些操作其子元素方法的,如文本、属性、名称空间等

Attribute:表示元素结点中的属性

SAXReader 就是一个管道,用一个流的方式,把xml文件读出来

OutputFormat xml格式化样式

XMLWriter 输出文件

实例

// 创建一个Document实例
        Document doc = DocumentHelper.createDocument();
        // 添加根节点
        Element root = doc.addElement("root");
        // 在根节点下添加第一个子节点
        Element oneChildElement = root.addElement("person").addAttribute("attr", "root noe");
        oneChildElement.addElement("people")
                .addAttribute("attr", "child one")
                .addText("person one child one");
        oneChildElement.addElement("people")
                .addAttribute("attr", "child two")
                .addText("person one child two");

        // 在根节点下添加第一个子节点
        Element twoChildElement = root.addElement("person").addAttribute("attr", "root two");
        twoChildElement.addElement("people")
                .addAttribute("attr", "child one")
                .addText("person two child one");
        twoChildElement.addElement("people")
                .addAttribute("attr", "child two")
                .addText("person two child two");

        // xml格式化样式
        // OutputFormat format = OutputFormat.createPrettyPrint(); // 默认样式
        // 自定义xml样式
        OutputFormat format = new OutputFormat();
        format.setIndentSize(2);  // 行缩进
        format.setNewlines(true); // 一个结点为一行
        format.setTrimText(true); // 去重空格
        format.setPadText(true);
        format.setNewLineAfterDeclaration(false); // 放置xml文件中第二行为空白行

        // 输出xml文件
        XMLWriter writer = new XMLWriter(new FileOutputStream("dom4j.xml"), format);
        writer.write(doc);
        System.out.println("dom4j CreateDom4j success!");
SAXReader reader = new SAXReader();
        Document document = reader.read(new File("dom4j.xml"));
        Element root = document.getRootElement();

        Iterator it = root.elementIterator();
        while (it.hasNext()) {
            Element element = (Element) it.next();
            //未知属性名称情况下
            Iterator attrIt = element.attributeIterator();
            while (attrIt.hasNext()) {
                Attribute a = (Attribute) attrIt.next();
                System.out.println(a.getValue());
            }
            //已知属性名称情况下
//            System.out.println("id: " + element.attributeValue("id"));
            //未知元素名情况下
            Iterator eleIt = element.elementIterator();
            while (eleIt.hasNext()) {
                Element e = (Element) eleIt.next();
                System.out.println(e.getName() + ": " + e.getText());
            }
            System.out.println();
            //已知元素名情况下
//            System.out.println("title: " + element.elementText("title"));
//            System.out.println("author: " + element.elementText("author"));
//            System.out.println();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值