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 = "<members></members>";
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 = <span style="font-family: 微软雅黑, sans-serif;">student</span>.attribute("sid");// 属性名name
<span style="font-family: 微软雅黑, sans-serif;">student</span><span style="font-family: 微软雅黑, sans-serif;">.remove(attribute);</span>

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 = "<members> <member>sitinspring</member> </members>";
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文件的更多相关文章

  1. java通过dom读写xml文件

    java通过dom读写xml文件 要读的xml文件 <?xml version="1.0" encoding="GB2312"?><学生花名册 ...

  2. java使用dom4j解析xml文件

    关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...

  3. Java使用DOM4J对XML文件进行增删改查操作

    Java进行XML文件操作,代码如下: package com.founder.mrp.util; import java.io.File; import java.util.ArrayList; i ...

  4. dom4j读写XML文件

    XML文件格式: <?xml version="1.0" encoding="UTF-8"?> <company> <employ ...

  5. Java利用dom4j生成xml文件、解析XML

    package com.fq.fanqi; import java.io.File;import java.io.FileWriter;import java.io.IOException;impor ...

  6. Java 读写XML文件 API--org.dom4j

    om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...

  7. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

  8. 【java项目实战】dom4j解析xml文件,连接Oracle数据库

    简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...

  9. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

随机推荐

  1. Linux、UNIX设置开机自动运行命令、脚本配置

    一般我们不建议人工部署开机自动启动的脚本.而是建议通过crontab 部署脚本监控,理由如下: 1.自动开机部署脚本不好定位问题,有可能导致主机重启过慢. 2.自动开机部署脚本不好定位问题,有可能导致 ...

  2. SVN状态图标消失的解决方法

    有些时候我们会发现我们的SVN状态图标会突然消失,所有的文件夹都变成了普通的文件夹格式,这点很不利于我们进行管理. 进入任意一个文件夹,鼠标右键,依次进入TortoiseSVN---Settings ...

  3. 一步步实现自己的ORM(三)

    章节列表: <一步步实现自己的ORM(一)> <一步步实现自己的ORM(二)> 通过前面两篇文章,我们大致了解了ORM的基本原理,是通过Attribute+反射获取表的基本信息 ...

  4. P1216 [USACO1.5]数字三角形 Number Triangles

    题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 ...

  5. IOS之constraints

    anyway, you can do this with auto layout. You can do it entirely in IB as of Xcode 5.1. Let's start ...

  6. 中国区 Azure 应用程序开发说明

    1.文档简介 微软公司为其在境外由微软运营的 Azure 服务(以下简称为 “境外 Azure”),创建和部署云应用程序,提供了相应工具. 在中国,由世纪互联运营的 Microsoft Azure ( ...

  7. C# 一维数组 冒泡排序

    假设有个三个杯子    一个杯子中有一个紫色的乒乓球  一个没有  一个有红色乒乓球    杯子不能动 怎么把紫色和红色的调换呢 主要是先把紫色的放到空的杯子   在把红的放到紫色原来的杯子   再把 ...

  8. 如何使用Git Bash Here,将本地项目传到github上

    申请一个github账号 安装git bash git与git bash的区别: git:版本控制工具,支持该工具的网站有Github.BitBucket.Gitorious.国内的osChina仓库 ...

  9. vector容器类型

    vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象).vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的. vector的构造   函数原型: tem ...

  10. asp.net mvc集成log4net

    第一步:在web项目的引用中添加log4net.dll,可以通过Nuget直接下载并安装: 第二步:在web项目的web.config配置文件的configuration节点内添加log4net节点, ...