XML解析-Dom4j的DOM解析方式更新XML
Dom4j工具,是非官方的,不在jdk中。
使用步骤:
1)导入dom4j的核心包。 dom4j-1.6.1.jar
2)编写Dom4j读取xml文件的代码
1、更新XML
1.1、写出内容到xml文档
- package com.rk.xml.g_dom4j_write;
- import java.io.File;
- import java.io.FileOutputStream;
- import org.dom4j.Document;
- import org.dom4j.io.SAXReader;
- import org.dom4j.io.XMLWriter;
- /**
- * 第一个写出内容到xml文档
- * @author RK
- *
- */
- public class Demo01
- {
- public static void main(String[] args) throws Exception
- {
- //一、读取或创建一个Document对象
- Document doc = new SAXReader().read(new File("./src/animals.xml"));
- //二、修改Document对象内容
- //三、把修改后的Document对象写出到xml文档中
- //指定文件输出的位置
- FileOutputStream outStream = new FileOutputStream("D:/rk/result.xml");
- //1.创建写出对象
- XMLWriter writer = new XMLWriter(outStream);
- //2.写出Document对象
- writer.write(doc);
- //3.关闭流
- writer.close();
- System.out.println("执行结束!");
- }
- }
1.2、写出内容到xml文档的细节
- package com.rk.xml.g_dom4j_write;
- import java.io.File;
- import java.io.FileOutputStream;
- import org.dom4j.Document;
- import org.dom4j.io.OutputFormat;
- import org.dom4j.io.SAXReader;
- import org.dom4j.io.XMLWriter;
- /**
- * 讨论写出内容到xml文档的细节
- * @author RK
- *
- */
- public class Demo02
- {
- public static void main(String[] args) throws Exception
- {
- Document doc = new SAXReader().read(new File("./src/animals2.xml"));
- /**
- * 1.指定写出的格式
- */
- // OutputFormat format = OutputFormat.createCompactFormat();//紧凑的格式.去除空格换行.项目上线的时候
- OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式.有空格和换行.开发调试的时候
- /**
- * 2.指定生成的xml文档的编码
- * 同时影响了xml文档保存时的编码 和 xml文档声明的encoding的编码(xml解析时的编码)
- * 结论: 使用该方法生成的xml文档避免中文乱码问题。
- */
- format.setEncoding("UTF-8");
- //指定文件输出的位置
- FileOutputStream outStream = new FileOutputStream("D:/rk/result.xml");
- //1.创建写出对象
- XMLWriter writer = new XMLWriter(outStream, format);
- //2.写出Document对象
- writer.write(doc);
- //3.关闭流
- writer.close();
- System.out.println("执行结束!");
- }
- }
1.3、修改xml内容:添加、修改、删除
- package com.rk.xml.g_dom4j_write;
- import java.io.File;
- import java.io.FileOutputStream;
- import org.dom4j.Document;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Node;
- import org.dom4j.Element;
- import org.dom4j.Attribute;
- import org.dom4j.Text;
- import org.dom4j.io.SAXReader;
- import org.dom4j.io.XMLWriter;
- import org.dom4j.io.OutputFormat;
- import org.junit.Test;
- /**
- * 修改xml内容
- * 增加:文档,标签 ,属性
- * 修改:属性值,文本
- * 删除:标签,属性
- *
- *
- */
- public class Demo03
- {
- /**
- * 增加:文档,标签 ,属性
- */
- @Test
- public void testAdd() throws Exception
- {
- //1.创建文档
- Document doc = DocumentHelper.createDocument();
- //2.增加标签
- Element rootElement = doc.addElement("ContactList");
- Element contactElement = rootElement.addElement("Contact");
- Element nameElement = contactElement.addElement("Name");
- nameElement.setText("小明");
- //3.增加属性
- contactElement.addAttribute("id", "c001");
- contactElement.addAttribute("region", "北京");
- //把修改后的Document对象写出到xml文档中
- FileOutputStream out = new FileOutputStream("D:/rk/contact.xml");
- OutputFormat format = OutputFormat.createPrettyPrint();
- format.setEncoding("utf-8");
- XMLWriter writer = new XMLWriter(out,format);
- writer.write(doc);
- writer.close();
- System.out.println("执行结束!");
- }
- /**
- * 修改:属性值,文本
- */
- @Test
- public void testModify() throws Exception
- {
- Document doc = new SAXReader().read(new File("./src/animals.xml"));
- /**
- * 方案一: 修改属性值 1.得到标签对象 2.得到属性对象 3.修改属性值
- */
- //1.1 得到标签对象
- Element catElement = doc.getRootElement().element("Cat");
- //1.2 得到属性对象
- Attribute catAttr = catElement.attribute("id");
- //1.3 修改属性值
- catAttr.setValue("c100");
- /**
- * 方案二: 修改属性值
- */
- //2.1 得到标签对象
- Element dogElement = doc.getRootElement().element("Dog");
- //2.2 通过增加同名属性的方法,修改属性值
- dogElement.addAttribute("id", "d100");
- /**
- * 修改文本 1.得到标签对象 2.修改文本
- */
- Element nameElement = doc.getRootElement().element("Cat").element("Home");
- nameElement.setText("第六宇宙");
- FileOutputStream out = new FileOutputStream("D:/rk/Animals.xml");
- OutputFormat format = OutputFormat.createPrettyPrint();
- format.setEncoding("utf-8");
- XMLWriter writer = new XMLWriter(out,format);
- writer.write(doc);
- writer.close();
- System.out.println("执行结束!");
- }
- /**
- * 删除:标签,属性
- */
- @Test
- public void testDelete() throws Exception
- {
- Document doc = new SAXReader().read(new File("./src/animals.xml"));
- /**
- * 1.删除标签 1.1 得到标签对象 1.2 删除标签对象
- */
- // 1.1 得到标签对象
- Element nameElement = doc.getRootElement().element("Cat").element("Home");
- //1.2 删除标签对象
- nameElement.detach();
- // nameElement.getParent().remove(nameElement);
- /**
- * 2.删除属性 2.1得到属性对象 2.2 删除属性
- */
- Element catElement = doc.getRootElement().element("Cat");
- //2.1得到属性对象
- Attribute idAttr = catElement.attribute("id");
- //2.2 删除属性
- idAttr.detach();
- // idAttr.getParent().remove(idAttr);
- FileOutputStream out = new FileOutputStream("D:/rk/animals.xml");
- OutputFormat format = OutputFormat.createPrettyPrint();
- format.setEncoding("utf-8");
- XMLWriter writer = new XMLWriter(out,format);
- writer.write(doc);
- writer.close();
- System.out.println("执行结束!");
- }
- }
2、思维导图

XML解析-Dom4j的DOM解析方式更新XML的更多相关文章
- 2.1 使用JAXP 对 xml文档进行DOM解析
//使用 jaxp 对xml文档进行dom解析 public class Demo2 { //必要步骤 @Test public void test() throws Exception { //1. ...
- 使用JAXP对xml文档进行DOM解析基础
XML解析方式分为两种:dom和sax dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式. sax: ...
- xml解析-jaxp之dom解析
package day06_parser.dom; /** * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写, * 中文含义是:用于XML文档处理的 ...
- 解析XML文件之使用DOM解析器
在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...
- Android笔记(四十五) Android中的数据存储——XML(一)DOM解析器
DOM解析XML在j2ee开发中比较常见,在Dom解析的过程中,是先把dom全部文件读入到内存中,然后使用dom的api遍历所有数据,检索想要的数据,这种方式显然是一种比较消耗内存的方式,对于像手机这 ...
- 使用JAXP对XML文档进行DOM解析
import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers. ...
- javaweb学习总结十一(JAXP对XML文档进行DOM解析)
一:将内存中写好的xml文件读取到硬盘上 二:DOM方式对xml文件进行增删改查 1:添加节点(默认是在最后的子节点后面添加) @Test // 向元素中添加节点<version>1.0& ...
- [ java 工具类] xml字符串解析成Map(DOM解析)
package com.tencent.jungle.wechat.util; import com.google.inject.Singleton; import org.w3c.dom.Docum ...
- java dom xml解析和windows dom解析的差别
1.java dom 子节点包括空节点. 2.java dom 文档节点值也是其的子节点. 而windows dom(mshtml.dll)子节点不包括空节点,而节点值也不是以子节点的方式来对待的.
随机推荐
- THUSC2019滚粗记
关于\(\mathrm{APIO}\)游记,它咕了... Day -1 \(\mathrm{\_tham}\)今天并没有准备给我们考试,所以机房充斥着过年的气息(雾 下午就要出发了,由于一些众所周知的 ...
- Adobe AIR 代码签名证书使用指南
Symantec,Thawte,GlobalSign 签发的代码签名证书都可以签名AIR文件.如果您还没有代码签名证书,请联系易维信(EVTrust)购买Adobe AIR 代码签名证书. 1.签名工 ...
- hdu 3062 2-sat
#include<stdio.h> #include<string.h> #define N 2100 struct node { int u,v,next; }bian[N* ...
- 学一学书里的django是怎么写views.py的
他山之石,可以攻玉嘛. 好的习惯有时也是学别人来养成的. 外国人的编码习惯,学啊. from django.core.urlresolvers import reverse_lazy from dja ...
- nyoj_600_花儿朵朵_201404162000
花儿朵朵 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 春天到了,花儿朵朵盛开,hrdv是一座大花园的主人,在他的花园里种着许多种鲜花,每当这个时候,就会有一大群游 ...
- [bzoj1040][ZJOI2007]骑士(环套树DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1040 分析:第一感觉肯定是树形DP,但可惜不是树.仔细分析,这个图很特殊,每个联通块肯 ...
- CentOS设置程序开机启动程序/服务的方法(转)
注意:CentOS 6下基本没什么问题,CentOS 7估计不一定能行. 在CentOS系统下,主要有两种方法设置自己安装的程序开机启动. 1.把启动程序的命令添加到/etc/rc.d/rc.loca ...
- android学习笔记(9)android程序调试学习
相应若水老师的第十四课 一,Log日志输出 Log.v(tag,message); //verbose模式,打印最具体的日志 Log.d(tag,message); // ...
- input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has
input屏蔽历史记录 设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处 ;(function($){$.ex ...
- LeetCode 706. Design HashMap (设计哈希映射)
题目标签:HashMap 题目让我们设计一个 hashmap, 有put, get, remove 功能. 建立一个 int array, index 是key, 值是 value,具体看code. ...