1. dom4j概述

解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP。

最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义。

2. dom4j的使用

2.1 Doucment相关用法

2.11 解析XML文件,获得Document对象

SAXReader reader = new SAXReader();

Document document = reader.read(new File("input.xml"));

2.12 解析字符串,获得Document对象

String text = "";

Document document = DocumentHelper.parseText(text);

2.13 无脑自建Document对象

Document document = DocumentHelper.createDocument();

Element root = document.addElement("members");// 创建根节点

2.2 节点相关用法

2.21 获得文档根节点

Element rootElm = document.getRootElement();

2.22 获得某个节点下的指定子节点

Element memberElm = root.element("member");// "member"是节点名 root为某个节点

2.23 获得节点下的文字

String text = memberElm.getText();

String text = root.elementText("name");

2.24 遍历取得某节点下名为member的所有子节点

List nodes = rootElm.elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) {

Element elm = (Element) it.next();

// do something

}

2.25 遍历取得某节点下的所有子节点

for (Iterator it = root.elementIterator();it.hasNext();){

Element element = (Element) it.next();

// do something

}

2.26 A节点下 Add/Delete B节点

Element B = A.addElement("age");

A.remove(B);

2.27 在根节点下添加一个CDATA节点

Element contentElm = root.addElement("content");

contentElm.addCDATA("Hello");

// 特别说明:获取节点的CDATA值与获取节点的值是一个方法

System.out.println("contentElm.getText() " + contentElm.getText());

2.3 属性相关用法

2.31 取得根节点下的某属性

Element root=document.getRootElement();

Attribute attribute=root.attribute("size");// 属性名name

2.32 取得/设置为(Set)上面该属性的文字

String text=attribute.getText();

2.33 遍历根节点下的所有属性

Element root=document.getRootElement();

for(Iterator it=root.attributeIterator();it.hasNext();){

Attribute attribute = (Attribute) it.next();

String text=attribute.getText();

System.out.println(text);

}

2.34 设置某个节点的属性和文字

element.addAttribute("name", "sitinspring");

2.35 为某节点添加和删除属性

// 新建student.xml文件并新增内容

Document document = DocumentHelper.createDocument();

Element root = document.addElement("学生信息");

Element student = root.addElement("学生");

student.addAttribute("sid", "001");

Attribute attribute = student.attribute("sid");// 属性名name

student.remove(attribute);

2.4 文档最后写入MXL文件OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("GBK"); // 指定XML编码

XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);

writer.write(document);

writer.close();

2.5 字符串与XML的转换

2.51 字符串 To XML

String text = "sitinspring";

Document document = DocumentHelper.parseText(text);

2.52 XML To 字符串

SAXReader reader = new SAXReader();

Document document = reader.read(new File("input.xml"));

Element root = document.getRootElement();

String docXmlText = document.asXML();

String rootXmlText= root.asXML();

Element memberElm = root.element("member");

String memberXmlText = memberElm.asXML();

2.6 格式化转义字符问题请查看这篇链接文。

3. 最后一个简单的小例子,看看注释和输出结果,很容易理解。就不多解释了。

程序连续运行两次输出结果如下:

import java.io.File;

import java.io.FileWriter;

import java.util.Iterator;

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 XML{

public static void main(String[] args) {

try {

XMLWriter writer = null;// 声明写XML的对象

SAXReader reader = new SAXReader();

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("GBK");// 设置XML文件的编码格式

String filePath = "d:\\student.xml";//文件路径

File file = new File(filePath);

if (file.exists()) {

Document document = reader.read(file);// 读取XML文件

Element root = document.getRootElement();// 得到根节点

boolean add_new = false;

for (Iterator i = root.elementIterator(); i.hasNext();) {

Element student = (Element) i.next();

if (student.attributeValue("sid").equals("001")) {

//获取并修改学生sid=001的学生信息

Element info_num = student.element("编号");

System.out.println("sid为001的该属性名为 - " + info_num.getName());

System.out.println("sid为001的该属性值为 - " + info_num.getText());

Element info_name = student.element("姓名");

System.out.println("sid为001的该属性名为 - " + info_name.getName());

System.out.println("sid为001的该属性值为 - " + info_name.getText());

info_name.setName("外号");

info_name.setText("余小二");

System.out.println("sid为001的同学新属性名为 - " + info_name.getName());

System.out.println("sid为001的同学新属性值为 - " + info_name.getText());

writer = new XMLWriter(new FileWriter(filePath), format);

writer.write(document);

writer.close();

add_new = true;

break;

}

}

if (add_new) {

// 添加一个学生信息

Element student = root.addElement("学生");

student.addAttribute("sid", "100");

Element sid = student.addElement("编号");

sid.setText("100");

Element name = student.addElement("姓名");

name.setText("老大");

Element sex = student.addElement("性别");

sex.setText("男");

Element age = student.addElement("年龄");

age.setText("40");

writer = new XMLWriter(new FileWriter(filePath), format);

writer.write(document);

writer.close();

}

} else {

// 新建student.xml文件并新增内容

Document document = DocumentHelper.createDocument();

Element root = document.addElement("学生信息");

Element student = root.addElement("学生");

student.addAttribute("sid", "001");

Element id = student.addElement("编号");

id.setText("001");

Element name = student.addElement("姓名");

name.setText("寂寞");

Element age = student.addElement("年龄");

age.setText("18");

writer = new XMLWriter(new FileWriter(file), format);

writer.write(document);

writer.close();

}

System.out.println("操作结束! ");

} catch (Exception e) {

e.printStackTrace();

}

}

java dom4j 写xml文件_Java实现——Dom4j读写XML文件相关推荐

  1. java dom读写xml文件_java通过dom读写xml文件

    java通过dom读写xml文件 要读的xml文件 encoding="GB2312"?> "男"> 李华姓名> 14年龄> 学生> ...

  2. JAVA编程TXT文件_java开发之读写txt文件操作的实现

    项目结构: 运行效果: ======================================================== 下面是代码部分: ====================== ...

  3. java文件流写入文件_JAVA IO流编程 实现文件的写入、写出以及拷贝

    一.流的概念 流:数据在数据源(文件)和程序(内存)之间经历的路径. 输入流:数据从数据源(文件)到程序(内存)的路径. 输出流:数据从程序(内存)到数据源(文件)的路径. 以内存为参照,如果数据向内 ...

  4. java高效写文件_java如何高效读写10G以上大文件

    有一份10G以上大文本文件,需要替换里面的一些文本信息(每一行都有),如何高效读并替换掉生成新的文件 先分割成多个文件 多个线程操作多个文件,避免两个线程操作同一个文件 按行读文件并按行写入新的文件 ...

  5. java自带的xml解析_Java自带的XML解析

    JAXP(Java API for XML Processing,意为处理XML的Java API) 解析XML一般有两种方式: 一种是DOM方式:一次性读取XML内容存入内存 优点:能进行各种增删改 ...

  6. java生成word 框勾_Java 使用模板生成 Word 文件---基于 Freemarker 模板框架

    Java项目引入 Freemarker 插件自行完成. 步骤如下: 1.编写 Word 模板,并将模板中要用代码动态生成数据用 Freemarker 变量取代,即${变量名},如${username} ...

  7. java追加txt文件_java怎么追加写入txt文件

    java中,对文件进行追加内容操作的三种方法! import java.io.BufferedWriter;import java.io.FileOutputStream;import java.io ...

  8. java 导入导出txt文件_Java读取和写入txt文件

    1 问题描述 对于java的读取和写入txt一直心存疑惑,随着知识的积累,又重新进行学习,对java的文件读写理解更加深刻,在这里将自己的小小经验总结分享给大家.下面是大家了解java流的一个基本框架 ...

  9. java追加字符串到文件_java 将字符串追加到文件已有内容后面的操作

    我就废话不多说了,大家还是直接看代码吧~ /** * 将字符串追加到文件已有内容后面 * * @param fileFullPath 文件完整地址:D:/test.txt * @param conte ...

  10. java中写入文件_java中创建、写入文件的5种方式

    在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files. ...

最新文章

  1. NAS存储对称和非对称结构之前的区别概述
  2. 转行python经验_【经验分享】转行如何自学Python并且找到工作,分享自己心得
  3. 学习如何使用JavaScript 生成各种好看的头像!
  4. python和pycharm之间的关系_浅析python,PyCharm,Anaconda三者之间的关系
  5. 【整理】BIOS、BootLoader、uboot对比
  6. 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
  7. 尚学堂java 答案解析 第六章
  8. docker on marathonmesos示例
  9. 北京公交将标配智能辅助驾驶,具备行人防撞、车道偏离预警
  10. 矩阵中求最大二维矩阵
  11. 细说VAE的来龙去脉 (Variational Autoencoder)
  12. FeHelper下载:(Chrome浏览器)
  13. ElasticSearch之搜索词提示Sug
  14. 元宇宙照进现实 金蝶联手科大讯飞发布“数字员工”
  15. excel文件导入hive乱码_把数据库数据导出到excel
  16. Halcon算子解释大全
  17. Lodop横向打印,正向显示问题
  18. MySQL-06-MD5加密
  19. 数据中心产业规模集中化发展观察
  20. 16年老股民,转入外汇市场,炒外汇为什么要用EA?

热门文章

  1. 19.多个版本的Netcat概览
  2. 设置php中字符编码_php如何设置字符编码
  3. C++表达式:if 语句
  4. 将某一位置1,将某一位置0,判断某一位是否为1
  5. linux oracle 12170,ora-12170 linux
  6. C#6中的新增功能 【Unity3D亲测】
  7. Mongodb2.6升级到Mongodb3.0.2笔记
  8. 指定JDK版本运行Tomcat
  9. UVA445 Marvelous Mazes
  10. LeetCode.004 Median of Two Sorted Arrays