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内容* 增加:文档,标签 ,属性* 修改:属性值,文本* 删除:标签,属性* @author RK**/
public class Demo03
{/*** 增加:文档,标签 ,属性*/@Testpublic 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("执行结束!");}/*** 修改:属性值,文本*/@Testpublic 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("执行结束!");}/*** 删除:标签,属性*/@Testpublic 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、思维导图

wKioL1c2J2mQaTfAAAHmv1_GZM0598.png


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt前端技术:5.QSS

这个是表示QFrame中的pushButton中的子类和它子类的子类都将背景变为red 写成大于的时候表示只有直接的子类对象才会变 这个图中的QGroupBox和QPushButton都是QFrame的直接的子类 这个中的QGroupBox是QFrame的直接的子类但是QPushButton 是QGroupBox的子类,QPushB…

Spring定时任务的几种实现

近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从…

解决quartz的job无法注入spring对象

一般情况下,quartz的job中使用autowired注解注入的对象为空,这时候我们就要使用spring-quartz提供的AdaptableJobFactory类。 自定义一个类: [java] view plaincopy public class JobFactory extends AdaptableJobFactory { Autowired …

Activiti 基础概念

1、ProcessInstance 与ProcessDefinition 流程实例(ProcessInstance)和流程定义(ProcessDefinition)的关系,与类和实例对象的关系有点像,ProcessDefinition是整个流程步骤的说明而ProcessInstance就是指流程…

IP地址开启https

证书生成导入 keytool -genkey -alias ssozzjz5 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -dname "CN192.168.1.128,OUcsoa,Ocsoa,LFZ,STFZ,CCN" -ext sanip:192.168.1.128 -validity 3600 -keystore D:\ssozzjz5.keystorekeytool -export -f…

JDK线程池CompletionService的使用

最近使用多线程优化了一个非常耗时的ping任务,下面的是未优化的源代码,大致就是遍历es取出的list,然后循环判断是否能ping通: SearchResponse searchResponse client.search(searchRequest); Iterator it searchResponse.getHi…

解决mediawiki上传文件文件名是中文上传失败

公司内部的wiki是用的mediawiki,其它都还好就是上传文件时文件名中有中文就不能上传,这次下决心要修复这个问题,一开始我还以为是哪里需要配置一下,然后搜了半天发现这是一个官方的bug: 好吧,是官方bug也好…

Metricbeat添加ip address信息

Metricbeat默认输出信息里没有ip地址,6.3版本之后可以通过add_host_metadata 来开启附带ip信息(没测试过) 原本我是通过修改modules.d/system.yml文件,在每项后面加自定义fields.ip字段来添加ip信息,类似下面这样&…

前端获取不了rest请求自定义headers的问题

前端response中的自定义header信息默认同一域中可见 在crossdomain跨域情况下需要在服务器端增加Access-Control-Expose-Headers的支持 例如在springboot中需要使用addExposedHeader添加指定返回头: Configuration public class CORSConfiguration implements WebM…

如何右键文件夹以Sublime 打开

最近总是拖动文件在Sublime Text 的运行环境下,想着能否鼠标右键打开项目文件夹。以下是具体操作步骤 1 windows下打开运行(或者在windowr); 2 输入regedit 进入window配置列表里面 3 在注册表编辑器中找的这个节点:在 HKEY_CLASSSES_ROOT→Folder ll…

高性能网站建设指南

进行优化前,关键是剖析当前的web性能,找到性能瓶颈,从而确定最需改进的地方;如果精力有限,首先将精力放在能明显提升性能的改进点上; 《高性能网站建设指南》提出了一个性能黄金法则: 只有10%-20%的最终用户响应时间花…

js来读写cookie操作

因为之前公司的项目前后端是在一起的,因为要用vue来重构之前的项目。所以token签名要作为一个参数传递到后台。所以就遇到两个问题,1 token的保存和获取的问题。 2 token 判断。判断用户是否用token值。 首先先说一下 token的保存和获取问题。 保存到哪&#xff1…

MUI tab选项卡之间的切换和数据获取

查看mui官网上面的例子&#xff0c;会看到有多种tab 选项卡的例子&#xff0c;我就写下我用到的tab选项卡。写了个简单的例子&#xff0c;效果如下图 主页面的代码 <nav class"mui-bar mui-bar-tab"><a class"mui-tab-item mui-active" href"…

ECharts 联动效果

在使用ECharts 时候要用到联动的&#xff0c;比如下面的示例图&#xff0c;当鼠标经过A的图的时候&#xff0c;这个时候有提示&#xff0c;然后让B的提示也显示出来。这样一个效果。 官方文档给的配置项&#xff0c; http://echarts.baidu.com/api.html#echarts.connect var my…

Git Permission to fazhiyun86/Test.git denied to MarRoar

先说明问题。在我的电脑上有两个SSH key&#xff0c;也就是有两个GitHub账户。我们在GitHub账户里面配置好 SSH key 的时候&#xff0c;就可以向自己的GitHub账户的仓库里面push 代码。 我们先在第一个账户push 代码的时候会让输入 用户名和密码。当向另一个账户push 东西的时…

ECharts 饼图 legend 样式修改

在移动端展示一个数据很多的饼图的时候&#xff0c;首先看一下效果。ECharts legend 配置项 1 legend 让它在右面竖着显示。 legend: {type: scroll,orient: vertical,show: true,right: 0,top: 20,bottom: 20,textStyle: {fontSize: 7},formatter: function (name) {return (n…

ECharts 仪表盘的轴线宽度修改

今天修改仪表盘的轴线宽度&#xff0c; 配置项链接。修改的是下图中线框标注地方的宽度。 下面看一下配置项 option {tooltip : {formatter: "{a} <br/>{b} : {c}%"},toolbox: {feature: {restore: {},saveAsImage: {}}},series: [{name: 业务指标,type: gau…

CSS 让数字滑动显示

最近在做一个数据展示的页面&#xff0c;老板想要的效果是数字滑动的显示。 所以想了一下实现了老板想要的效果。代码如下。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>number</title><…

Status Code:200 OK (from disk cache)和304的区别,以及怎么禁止缓存

有时候缓存是 200 OK (from disk cache)有时候会是 304 ? 看运维是否移除了 Entity Tag。移除了&#xff0c;就总是 200 OK (from cache)。没有移除&#xff0c;就两者交替出现。 他们两个的区别是 200 OK (from disk cache) 是浏览器没有跟服务器确认&#xff0c; 就是它直接…

js 排序

冒泡排序 var dataStore [ 72 , 1 , 68 , 95 , 75 , 54 , 58 , 10 , 35 , 6 , 28 , 45 , 69 , 13 , 88 , 99 , 24 , 28 , 30 , 31 , 78 , 2 , 77 , 82 , 72 ];var t bubbleSort(dataStore);console.log(t);function bubbleSort(data) {var temp 0;for (var i 0; i < dat…