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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用dom4j操作xml需要以下步骤: 1. 导入dom4j相关的jar包。 2. 创建SAXReader对象,用于读取xml文件。 3. 调用SAXReader对象的read方法读取xml文件,生成Document对象。 4. 获取根元素,通过Document对象的getRootElement方法获取根元素。 5. 获取子元素,通过Element对象的element方法获取子元素。 6. 获取属性值,通过Element对象的attributeValue方法获取属性值。 7. 获取文本内容,通过Element对象的getText方法获取文本内容。 8. 修改xml,通过Element对象的addAttribute、addElement和setText方法修改xml内容。 9. 保存xml,通过XMLWriter对象将修改后的xml写入文件中。 以下是一个使用dom4j操作xml的示例代码: ```java import java.io.File; import java.io.FileWriter; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; 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 { // 读取xml文件 SAXReader reader = new SAXReader(); Document document = reader.read(new File("test.xml")); // 获取根元素 Element root = document.getRootElement(); // 获取子元素 List<Element> childElements = root.elements(); for (Element child : childElements) { // 获取属性值 Attribute idAttr = child.attribute("id"); String id = idAttr.getValue(); System.out.println("id:" + id); // 获取文本内容 String name = child.elementText("name"); System.out.println("name:" + name); // 修改xml child.addAttribute("newAttr", "newAttrValue"); child.addElement("newElement").setText("newElementText"); child.element("name").setText("newName"); } // 保存xml OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter("test.xml"), format); writer.write(document); writer.close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值