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

上一篇文章我介绍了SAX方法解析XML文件的过程,这篇文章讲解的内容是利用DOM方法修改XML文件的节点内容。

下面依然是首先贴出XML文件:

172.16.6.17

8080

最高人民检查院

E:\rec

测试

我们可以看到这个文件非常简单,只有一个根节点,所以我在代码中就只是用到根节点,当然,如果遇到复杂的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();

}

}

}

相关系列阅读:

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值