您的位置:首页 > 编程语言 > Java开发

java操作xml文件--修改节点

2013-08-13 13:32 519 查看
上一篇文章我介绍了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,得到了我们想要的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: