java操作xml文件--修改节点
上一篇文章我介绍了SAX方法解析XML文件的过程,这篇文章讲解的内容是利用DOM方法修改XML文件的节点内容。
下面依然是首先贴出XML文件:
<?xml version="1.0" encoding="UTF-8"?> <EPClientDemo> <WebService_IP>172.16.6.17</WebService_IP> <WebService_PORT>8080</WebService_PORT> <Dest>最高人民检查院 </Dest> <RootPath_Receive>E:\rec</RootPath_Receive> <Receiver>测试 </Receiver> </EPClientDemo>
我们可以看到这个文件非常简单,只有一个根节点,所以我在代码中就只是用到根节点,当然,如果遇到复杂的XML文件,解析方法是相同的,只需要指定某一层的父节点即可。
好了,不多说废话了,直接贴出解析类,说明我在这里就不写了,代码中都有
package com.brucezhang.xmltest;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
public class MyDom_Update {
/**
* @param index 修改值的标签索引
* @param count 修改的是第几个值
* @param value 修改的目标值
* @param outOrno 是否输出XML文件内容
*
* @author DLUTBruceZhang
* */
public void update(String index, int count, String value, boolean outOrno) {
Document document = null;
try {
document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("my_xml.xml");
Element root = document.getDocumentElement();
root.getElementsByTagName(index).item(count).setTextContent(value);
output(root, "my_xml.xml");
if (outOrno) {
System.out.println("-------------------------使用DOM方法输出-------------------------");
output(root, null);
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//写回XML文件,保存修改或打印到控制台
public static void output(Node node, String filename) {
TransformerFactory transFactory = TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
// 设置各种输出属性
transformer.setOutputProperty("encoding", "gb2312");
transformer.setOutputProperty("indent", "yes");
DOMSource source = new DOMSource();
// 将待转换输出节点赋值给DOM源模型的持有者(holder)
source.setNode(node);
StreamResult result = new StreamResult();
if (filename == null) {
// 设置标准输出流为transformer的底层输出目标
result.setOutputStream(System.out);
} else {
result.setOutputStream(new FileOutputStream(filename));
}
// 执行转换从源模型到控制台输出流
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
最后,我们需要测试这段代码能不能用,我们编写下主测试程序:
package com.brucezhang.xmltest;
public class Main_Test {
/**
* @param args
* Author:DLUTBruceZhang
*/
public static void main(String[] args){
// TODO Auto-generated method stub
//修改XML文件
// 目标文件
// <EPClientDemo>
// <WebService_IP>201.55.46.79</WebService_IP>
// <WebService_PORT>3389</WebService_PORT>
// <Dest>DLUT</Dest>
// <RootPath_Receive>F:\rec</RootPath_Receive>
// <Receiver>研发 </Receiver>
// </EPClientDemo>
update();
}
public static void update(){
MyDom_Update mUpdate = new MyDom_Update();
System.out.println("\n\n尝试修改节点内容中。。。");
mUpdate.update("WebService_IP", 0, "201.55.46.79", false);
mUpdate.update("WebService_PORT", 0, "3389", false);
mUpdate.update("Dest", 0, "DLUT", false);
mUpdate.update("RootPath_Receive", 0, "F:\\rec", false);
mUpdate.update("Receiver", 0, "研发", true);
System.out.println("修改节点内容成功。。。");
}
}
最后,我们运行下,得到如下的结果:
尝试修改节点内容中。。。 -------------------------使用DOM方法输出------------------------- <?xml version="1.0" encoding="GB2312"?> <EPClientDemo> <WebService_IP>201.55.46.79</WebService_IP> <WebService_PORT>3389</WebService_PORT> <Dest>DLUT</Dest> <RootPath_Receive>F:\rec</RootPath_Receive> <Receiver>研发</Receiver> </EPClientDemo> 修改节点内容成功。。。
OK,得到了我们想要的结果。
java操作xml文件--修改节点的更多相关文章
- Java操作XML文件 dom4j 篇
在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...
- Java操作xml文件
Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- java操作XML文件--读取内容
先把问题贴出来:编写一个可以解析xml及修改xml内容的工具类 由于我以前做过Android应用程序开发,之前也解析过xml文件,所以,这道题不是很难,这篇文章我先解决第一个问 ...
- Java操作xml文件的jar包dom4j
只能解析xml文件,不能解析普通的文件 https://www.cnblogs.com/sharpest/p/7877501.html
- JAVA中通过Jaxp操作XML文件基础
Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...
- Java 操纵XML之修改XML文件
Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...
- 更新java对xml文件的操作
//更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...
- # java对xml文件的基本操作
下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...
随机推荐
- hdu 5398 动态树LCT
GCD Tree Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- poj1741Tree 点分治
上午学习了点分治,写了1个半小时终于写出一个代码--poj1741,可以说是个模板题. 分治:对于每个儿子找出重心,分别处理 注意:1.每次处理一个重心后,ans减去对它儿子的处理 原因:因为统计方法 ...
- jqGrid移动滑块时冻结首列和第二列例子
js代码如以下代码:在initAllGrid函数colModel1加入属性设置:frozen:true:然后在_initGrid('task_con_grid_div',colModel1)函数里面加 ...
- 求n的阶乘
import java.util.Scanner; public class J { public static void main(String args[]) { //注释:int n=6 ...
- DeepMoji:机器学习模型分析情绪, 情感
DeepMoji 是一个模型,接受12亿个带有表情的推文,以了解语言如何表达情绪. 通过转移学习,该模型可以在许多情感相关的文本建模任务上获得最先进的表现. 在 http://deepmoji.mit ...
- Angular 和 Vue 使用的对比总结 -- 脚手架
前言 之前是用Vue的,现在由于工作原因,开始使用Angular.分别是Vue2和Angular5入的坑.只是从使用上来对比总结,加深记忆,避免混淆. 什么 ? 你问实现原理的异同及优劣? 本宝宝还 ...
- C指针 指针和数组 二维数组的指针 指针应用
直接到变量名标识的存储单元中读取变量的值--直接寻址 通过其他变量间接找到变量的地址读取变量的值--间接寻址 指针变量存放地址 显示变量的地址 指针变量使用前必须初始化,若不知指向哪,可先指向NULL ...
- font-spider利器对webfont网页字体压缩使用
http://font-spider.org/ npm install font-spider -g hyheilizhitij(汉仪黑荔枝体简) //引入 @font-face{ font-fami ...
- ubuntu查看IO
在命令行直接 cp 一个比较大的文件时,由于没有提示信息,总感觉很不放心,可以通过查看IO的方式确认cp操作的进展程度. 查看IO可以使用iostat命令,但是前提是要安装sysstat sudo a ...
- python学习之路基础篇(第四篇)
一.课程内容回顾 1.python基础 2.基本数据类型 (str|list|dict|tuple) 3.将字符串“老男人”转换成utf-8 s = "老男人" ret = by ...