java dom4j 写xml文件_Java实现——Dom4j读写XML文件

1. dom4j概述

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

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

6502816fdc2827068a7ce64d21cb76b7.png

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. 最后一个简单的小例子,看看注释和输出结果,很容易理解。就不多解释了。

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

e8c15227fc2cfc85b0507114e27d4cd4.png

e9c4253a52cd37e217074bdfdda4d48b.png

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值