1.要解析的xml文件book.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="book1">
<title>JAVA编程思想</title>
<price>80.00</price>
</book>
<book id="book2">
<title>JAVA核心技术</title>
<price>100.00</price>
</book>
</books>

2.解析xml文件

package com.chen.dom;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List; import org.dom4j.Attribute;
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;
import org.junit.Test; public class Dom4jTest {
@Test
public void read() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("resource/book.xml"));
Element root = document.getRootElement();
Element book1 = (Element) root.elements("book").get(0);
String id1 = book1.attributeValue("id");
String titleText = book1.element("title").getTextTrim();
System.out.println(id1 + "---" + titleText);
} /*
* 将整个xml使用递归完整输出
*/
@Test
public void readIterator() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("resource/book.xml"));
Element root = document.getRootElement();
// 递归解析xml
parse(root); } // 递归解析xml
public void parse(Element element) {
System.out.print("<" + element.getName());
// 遍历节点的属性
List<Attribute> attributes = element.attributes();
for (int i = 0; i < attributes.size(); i++) {
Attribute attr = attributes.get(i);
String name = attr.getName();
String value = attr.getValue();
System.out.print(" " + name + "=\"" + value + "\"");
}
System.out.println(">");
// 获取节点的文本信息
if (element.getTextTrim() != null && !"".equals(element.getTextTrim())) {
System.out.println(element.getTextTrim());
}
// 对该节点进行递归
for (Iterator i = element.elementIterator(); i.hasNext();) {
parse((Element) i.next());
}
System.out.println("</" + element.getName() + ">");
} @Test
public void add() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("resource/book.xml"));
Element root = document.getRootElement();
Element book1 = (Element) root.elements("book").get(1);
Element authorElement = book1.addElement("author")
.addAttribute("id", "author2").addText("张三"); OutputFormat format = OutputFormat.createPrettyPrint();
//从这里可以看出dom4j默认的编码方式为utf-8
System.out.println(format.getEncoding());
//设置编码格式防止乱码 <?xml version="1.0" encoding="gb2312"?>
format.setEncoding("utf-8"); //使用FileWriter会乱码,因为使用了默认的gb2312编码输出,而dom4j使用的是默认的UTF-8编码
//如果format.setEncoding("gb2312"); 使用FileWriter就不会乱码
//XMLWriter writer = new XMLWriter(new FileWriter("resource/book.xml"),format); //使用FileOutputStream输出时指定编码 这个编码要和format.setEncoding("utf-8"); 一样
//XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("resource/book.xml"), "utf-8"),format);
//最简单的方法是设置format.setEncoding("utf-8");然后使用字节流输出
XMLWriter writer = new XMLWriter(new FileOutputStream("resource/book.xml"),format); writer.write(document);
writer.close();
} //在指定位置上添加个新节点(改变list集合的顺序)
@Test
public void add2() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("resource/book.xml"));
Element element = document.getRootElement().element("book");
List list = element.elements();
Element publishElement = DocumentHelper.createElement("publish");
publishElement.addText("机械工业出版社");
//改变list集合的顺序,就可以达到在指定位置添加新节点
list.add(1, publishElement); OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("resource/book.xml"),format);
writer.write(document);
writer.close();
}
}

xml乱码的样子:

dom4j的小例子的更多相关文章

  1. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

  2. Spring和Hibernate结合的一个小例子

    1.新建一个SpringHibernate的maven项目 2.pom文件的依赖为 <dependency> <groupId>junit</groupId> &l ...

  3. dom4j的测试例子和源码详解(重点对比和DOM、SAX的区别)

    目录 简介 DOM.SAX.JAXP和DOM4J xerces解释器 SAX DOM JAXP DOM解析器 获取SAX解析器 DOM4j 项目环境 工程环境 创建项目 引入依赖 使用例子--生成xm ...

  4. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  5. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  6. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  7. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...

  8. INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...

  9. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

随机推荐

  1. 简单配置 nginx 反向代理

    # Nginx 域名反向代理配置# 安装nginx yum install nginx -y# 修改配置文件 进入配置文件目录 cd /etc/nginx/conf.d 新建配置文件以.conf结尾 ...

  2. java nio系列文章

    java nio系列教程 基于NIO的Client/Server程序实践 (推荐) java nio与并发编程相关电子书籍   (访问密码 48dd) 理解NIO nio学习记录 图解ByteBuff ...

  3. 关于Jmeter分布式测试在公司内的使用

    首先非常感谢虫师的文章受益匪浅 http://www.cnblogs.com/fnng/category/345478.html 今天,花了半天时间进行分布式的测试,真是纠结啊!! RT 1.在公司用 ...

  4. BZOJ 2693: jzptab [莫比乌斯反演 线性筛]

    2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1194  Solved: 455[Submit][Status][Discu ...

  5. 那些年我们学过的构造函数(构造方法,C#)

    构造函数也称构造方法,在面向对象中称为构造方法,在面向过程中称为构造函数;C#是面向对象的语言,所以以下都称为构造方法, OK,下面我们先看一下什么是构造函数 class Dog { //创建一个狗类 ...

  6. 解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现

    前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义.本章,我们将 ...

  7. FtpUtil

    /* * 文件名:FtpUtil.java * 版权:Copyright 2000-2007 Huawei Tech. Co. Ltd. All Rights Reserved. * 描述: TopE ...

  8. [转] eclipse SVN中文件修改后图标不变黑星解决

    原文地址:http://blog.csdn.net/luwei42768/article/details/39225641 版权声明:本文为博主原创文章,未经博主允许不得转载. 如上图, 如果文件修改 ...

  9. iOS 读取大文件时候的注意点

    转: 使用NSData读取数据,采用NSData的dataWithContentsOfFile:方法.不少人反馈说如果直接使用,将会耗尽iOS的内存. 其实这个是可以改善的. NSData还有一个AP ...

  10. jQuery Mobile入门

    转:http://www.cnblogs.com/linjiqin/archive/2011/07/17/2108896.html 简介:jQuery Mobile框架可以轻松的帮助我们实现非常好看的 ...