Java实现——Dom4j读写XML文件
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文件的更多相关文章
- java通过dom读写xml文件
java通过dom读写xml文件 要读的xml文件 <?xml version="1.0" encoding="GB2312"?><学生花名册 ...
- java使用dom4j解析xml文件
关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...
- Java使用DOM4J对XML文件进行增删改查操作
Java进行XML文件操作,代码如下: package com.founder.mrp.util; import java.io.File; import java.util.ArrayList; i ...
- dom4j读写XML文件
XML文件格式: <?xml version="1.0" encoding="UTF-8"?> <company> <employ ...
- Java利用dom4j生成xml文件、解析XML
package com.fq.fanqi; import java.io.File;import java.io.FileWriter;import java.io.IOException;impor ...
- Java 读写XML文件 API--org.dom4j
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...
- Java进阶(二十七)使用Dom4j解析XML文件
使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库
简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
随机推荐
- equals方法那些事
1.Equals 很多人对equals方法的用法有些模糊,这里来为大家梳理下: 字符串中的equals方法,该方法用来判断两个字符串的内容是否相同. 例1: String str1="Hel ...
- AJPFX分享JAVA修饰符详解
1.类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1 )公共类修饰符 pub ...
- T4310 祖玛游戏
题目描述 祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干 个彩色珠子,其中任意三个相邻的珠子不会完全同色.此后,你可以发射珠子到 轨道上并加入原有序列中.一旦有三个或更多同色的珠子 ...
- JavaScript中的this陷阱
当有人问起你JavaScript有什么特点的时候,你可能立马就想到了单线程.事件驱动.面向对象等一堆词语,但是如果真的让你解释一下这些概念,可能真解释不清楚.有句话这么说:如果你不能向一个6岁小孩解释 ...
- Java类的静态块の二
在上一篇Java类的静态块の一中介绍到:类的静态块在类加载时候执行,执行早于构造函数,并且只执行一次. 但是在下面的例子中却发现JVM并不是把把所有的static模块都执行完成再执行其他(Java果然 ...
- Yii2中多表关联查询(with、join、joinwith)
表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name custome ...
- MYSQL 写入emoji表情字符处理
这个鬼emoji表情是4个字节,mysql使用的utf8编码,UTF8占3个字节,要存储那个emoji表情需要将mysql编码由UFT8改为UFT8的超集,utf8mb4; 改数据库编码容易引起大面的 ...
- 洛谷 P1204 [USACO1.2]挤牛奶Milking Cows
题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...
- 洛谷 P1464 Function
题目描述 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,2 ...
- Servlet The Request
The Request HTTP Protocol Parameters 所有的HTTP Protocol Parameters都会放在一个Map中, 可以通过getParameterMap得到. 对 ...