上一篇文章我介绍了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文件--修改节点的更多相关文章

  1. Java操作XML文件 dom4j 篇

    在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...

  2. Java操作xml文件

    Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...

  3. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  4. java操作XML文件--读取内容

          先把问题贴出来:编写一个可以解析xml及修改xml内容的工具类       由于我以前做过Android应用程序开发,之前也解析过xml文件,所以,这道题不是很难,这篇文章我先解决第一个问 ...

  5. Java操作xml文件的jar包dom4j

    只能解析xml文件,不能解析普通的文件 https://www.cnblogs.com/sharpest/p/7877501.html

  6. JAVA中通过Jaxp操作XML文件基础

    Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...

  7. Java 操纵XML之修改XML文件

    Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...

  8. 更新java对xml文件的操作

    //更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...

  9. # java对xml文件的基本操作

    下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...

随机推荐

  1. [HDU]4694 Important Sisters(支配树)

    支配树模板 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...

  2. 【CODEVS 6384 大米兔学全排列】

    ·大米兔学习全排列,还有一些逆序对,还有一棵二叉索引树.· ·分析:       首先肯定不是像题目上说的那样,使用next_permutation去完成这道题,因为就算是线性的它也不能承受庞大的排列 ...

  3. [Noi2016]国王饮水记

    来自FallDream的博客,未经允许,请勿转载,谢谢. 跳蚤国有 n 个城市,伟大的跳蚤国王居住在跳蚤国首都中,即 1 号城市中.跳蚤国最大的问题就是饮水问题,由于首都中居住的跳蚤实在太多,跳蚤国王 ...

  4. 在右键中添加以管理员运行CMD命令提示符 (进化版)

    直接代码,转过来的 20180316更新添加快捷键A,点右键按A即可: Windows Registry Editor Version 5.00 ; Created by: Shawn Brink ; ...

  5. 在Unix系统中,主存索引节点和辅存索引节点从内容上比较有什么不同,为什么要设置主存索引节点?

    主存索引节点和辅存索引节点的不同主要体现在:主存索引节点状态:设备号.索引节点号:引用计数. 主存索引节点状态——反映主存索引节点的使用情况.它指示出: 1.  索引节点是否被锁上了: 2.  是否有 ...

  6. 《java技术》第二次作业

    (一)学习总结 1.什么是构造方法?什么是构造方法的重载? 1)没有返回值,名字与类名相同,当新对象被创建的时候,构造函数会被调用,要想构造函数,必须声明对象并对其初始化.每一个类都有构造函数,如果没 ...

  7. JAVA学习总结-多线程基础:

    参考书籍:疯狂JAVA讲义 1.进程和线程; 进程是处于运行过程中的程序;并且具有一定的独立功能;进程是系统进行系统资源分配和调度的一个独立单位. 一般而言,进程包括以下三个特征: 独立性:进程是系统 ...

  8. 移动端web开发中对点透的处理,以及理解fastclick如何做到去除300ms延迟

     一.点透问题以及处理办法 开发中遇到一个问题,就是点击layer弹出框的取消按钮之后,按钮下方的click事件就直接触发了.直接看代码: $('.swiper-slide').on('click', ...

  9. php序列化漏洞理解

    0x01什么是序列化 序列化就是将我们的 对象转变成一个字符串,保存对象的值方便之后的传递与使用. 0x02为什么要序列化 如果为一个脚本中想要调用之前一个脚本的变量,但是前一个脚本已经执行完毕,所有 ...

  10. 托管C++、C++/CLI、CLR

    1.什么是托管C++? 在回答这个问题,首先要搞清楚什么是"托管"(Managed).托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完 ...