Dom4j是一个易于使用的,开源的库,在Java平台上与XML,XPath,XSLT协同工作。使用Java集合框架,全面支持DOM,SAX,JAXP。 
官方网站:http://dom4j.org

1.将XML文件转换为一个Document对象

import java.net.URL;

import org.dom4j.Document; 
import org.dom4j.DocumentException; 
import org.dom4j.io.SAXReader;

public class Foo {

public Document parse(URL url) throws DocumentException { 
        SAXReader reader = new SAXReader(); 
        Document document = reader.read(url); 
        return document; 
    } 
}

2.很多方法用于操作Document,可以返回标准的Java迭代器

public void bar(Document document) throws DocumentException {

Element root = document.getRootElement();

// iterate through child elements of root 
        for ( Iterator i = root.elementIterator(); i.hasNext(); ) { 
            Element element = (Element) i.next(); 
            // do something 
        }

// iterate through child elements of root with element name "foo" 
        for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) { 
            Element foo = (Element) i.next(); 
            // do something 
        }

// iterate through attributes of root 
        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) { 
            Attribute attribute = (Attribute) i.next(); 
            // do something 
        } 
     }

3.快速循环

如果你需要遍历一个很大的XML文档,可以使用快速循环(递归)来改善性能。可以避免为每一次循环都创建一个迭代器对象。

public void treeWalk(Document document) { 
        treeWalk( document.getRootElement() ); 
    }

public void treeWalk(Element element) { 
        for ( int i = 0, size = element.nodeCount(); i < size; i++ ) { 
            Node node = element.node(i); 
            if ( node instanceof Element ) { 
                treeWalk( (Element) node ); 
            } 
            else { 
                // do something.... 
            } 
        } 
    }

4.创建一个新的XML文档

import org.dom4j.Document; 
import org.dom4j.DocumentHelper; 
import org.dom4j.Element;

public class Foo {

public Document createDocument() { 
        Document document = DocumentHelper.createDocument(); 
        Element root = document.addElement( "root" );

Element author1 = root.addElement( "author" ) 
            .addAttribute( "name", "James" ) 
            .addAttribute( "location", "UK" ) 
            .addText( "James Strachan" ); 
        
        Element author2 = root.addElement( "author" ) 
            .addAttribute( "name", "Bob" ) 
            .addAttribute( "location", "US" ) 
            .addText( "Bob McWhirter" );

return document; 
    } 
}

5.将XML文档写入文件

通过write()方法将一个XML文档写入文件是最简单的方式。 
    FileWriter out = new FileWriter( "foo.xml" ); 
    document.write( out ); 
    
  如果你想改变输出的格式,比如美观的格式(含缩进)和压缩的格式(不含缩进),可以使用XMLWriter类。

import org.dom4j.Document; 
import org.dom4j.io.OutputFormat; 
import org.dom4j.io.XMLWriter;

public class Foo {

public void write(Document document) throws IOException {

// lets write to a file 
        XMLWriter writer = new XMLWriter( 
            new FileWriter( "output.xml" ) 
        ); 
        writer.write( document ); 
        writer.close();

// Pretty print the document to System.out 
        OutputFormat format = OutputFormat.createPrettyPrint(); 
        writer = new XMLWriter( System.out, format ); 
        writer.write( document );

// Compact format to System.out 
        format = OutputFormat.createCompactFormat(); 
        writer = new XMLWriter( System.out, format ); 
        writer.write( document ); 
    } 
}

6.XML和String之间的相互转换

通过asXML()方法,你可以将一个Document,Attribute或Element对象转换成一个包含XML文本的字符串。 
        Document document = ...; 
        String text = document.asXML();

同样,通过DocumentHelper.parseText()方法,你也可以方便地将一个字符串形式的XML转换成一个Document对象。 
        String text = "<person> <name>James</name> </person>"; 
        Document document = DocumentHelper.parseText(text);

Dom4j官网解释实例的更多相关文章

  1. layui前端框架实例(修复官网数据接口异常问题)

    layui前端框架实例,官网的实例会提示数据接口异常,已修复. 主要是修改数据表格,做一个可以用的实例,可以选中,编辑,删除等. gitee地址:https://gitee.com/pingg2019 ...

  2. 【ABAP系列】SAP LSMW(摘自官网)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP LSMW(摘自官网)   前 ...

  3. [ActionScript 3.0] Away3D 官网实例

    /* Dynamic tree generation and placement in a night-time scene Demonstrates: How to create a height ...

  4. activiti官网实例项目activiti-explorer之扩展流程节点属性2

    情景需求:需要查找activiti-explorer项目中获取流程id的方法,然后根据流程id获取相应字段在节点属性中添加内容. 大致流程:拿取整个流程id获取对应表单属性,在页面节点属性中展示对应表 ...

  5. Knockout官网实例在MVC下的实现-02,实现计次

    本篇使用Knockout在MVC下实现"Hello World",对应的官网实例在这里. 当次数达到3: View视图 页面包含三个部分:1.显示点击按钮的次数2.button按钮 ...

  6. Knockout官网实例在MVC下的实现-01,实现Hello world

    本篇使用Knockout在MVC下实现"Hello World",对应的官网实例在这里. View视图 Knockout的一个特点是:声明式绑定,即Declarative bind ...

  7. 官网实例详解-目录和实例简介-keras学习笔记四

    官网实例详解-目录和实例简介-keras学习笔记四 2018-06-11 10:36:18 wyx100 阅读数 4193更多 分类专栏: 人工智能 python 深度学习 keras   版权声明: ...

  8. vue3官网介绍,安装,创建一个vue实例

    前言:这一章主要是vue的介绍.安装.以及如何创建一个vue实例. 一.vue介绍 vue3中文官网:建议先自己看官网. https://v3.cn.vuejs.org/ vue是渐进式框架,渐进式指 ...

  9. BootStrap的一个标准框架的内容解释——来源于bootstrap官网

    <!DOCTYPE html><!--HTML5的定义--><html lang="zh-cn"> <head> <meta ...

随机推荐

  1. 第四周课堂笔记1th

    函数   关键字def   函数名加括号  是调用函数   Return   相当于给函数算完之后给予另一个返回值   返回的是元组 如果return后没写返回none Return在函数中可以结束整 ...

  2. 面试系列19 redis的雪崩和穿透

    缓存雪崩发生的现象 缓存雪崩的事前事中事后的解决方案 事前:redis高可用,主从+哨兵,redis cluster,避免全盘崩溃 事中:本地ehcache缓存 + hystrix限流&降级, ...

  3. HTML中被废弃的标签<b><u><i><s>

    <strong>代替<b>给文字加粗 <ins>代替<u>给文本添加下划线 <em>代替<i>将文本倾斜 <del> ...

  4. Java开发系列-电子邮箱

    概述 电子邮箱就是在邮箱服务器上开启的一块空间.邮箱服务器就是一个安装在计算机的服务软件,提供有邮件服务. 邮箱的发送流程 现在tom要发送一份邮件给jerry,首先tom将邮件通过客户端连接自己设置 ...

  5. [转]Git 常用命令详解

    史上最浅显易懂的Git教程 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ht ...

  6. 关于join的一些补充

    1, 为什么join是string的method而不是list的method http://effbot.org/pyfaq/why-is-join-a-string-method-instead-o ...

  7. JavaScript中数组的基础知识和相关方法

      数组基础 数组是大多数语言里面最常见的一种数据结构,它是一个有序的值列表. 创建数组 1.创建字面量数组 let arr=[]; 2.创建构造函数数组 let arr=new Array(); 注 ...

  8. 基于vue-cli的vs code设置

    vue-cli自带eslin校验,vs code采用下可以设置在保存文件时会自动纠正格式 { // vscode默认启用了根据文件类型自动设置tabsize的选项 "editor.detec ...

  9. PKU--1976 A Mini Locomotive (01背包)

    题目http://poj.org/problem?id=1976 分析:给n个数,求连续3段和的最大值. 这个题目的思考方式很像背包问题. dp[i][j]表示前i个数字,放在j段的最大值. 如果选了 ...

  10. Jmeter性能测试(第三篇)

    一.调通脚本(以json串Post接口为例)添加聚合报告(线程组->添加->监听器->聚合报告)并调试好需要压测的脚本,如下已经调通的P_C_B151就是我需要压测的脚本 二.设置场 ...