在前面的两篇文章中,我只是对java中如何读取xml节点的内容作了一些阐述,并没有对利用java如何更新xml文件中的节点内容作出阐述。这篇文章主要和同行们分享一下利用java更新xml文件中节点内容的方法。首先我先给大家说一下,这篇文章所涉及到的更新xml节点中的内容的主要原理吧。更新首先得先把文件解析出来,此时像我们上一篇文章那样获取到Document对象,然后对Document对象的内容进行修改,最后将Doucment对象重新写入到xml文件中,从而实现xml文件中节点内容的修改。首先将我的Demo的代码贴出来与大家分享一下吧!
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
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.*;
import org.xml.sax.SAXException;
//获取xml,并修改xml文件中的内容
public class UpdateXml {
public static void main(String[] args) {
UpdateXml.UpdateXmlDemo();
}
/**
* 加载xml文件
* @param fileName xml文件存放位置
* @return 文档对象Document
*/
public static Document Load(String fileName) {
Document document = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(new File(fileName));
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return document;
}
/**
* 修改xml指定节点的内容
*/
public static void UpdateXmlDemo() {
Document document = Load("C://IPAndPort.xml");
Element root = document.getDocumentElement(); //config
if (root.hasChildNodes()) {
NodeList list = root.getChildNodes();
for(int index = 0;index < list.getLength(); index++) {
NodeList list2 = list.item(index).getChildNodes(); //communication
for (int i = 0; i < list2.getLength(); i++) {
NodeList list3 = list2.item(i).getChildNodes(); //net
for (int j = 0; j < list3.getLength(); j++) {
Node ip = (Node) list3.item(j);
if (ip.getNodeName() == "ip") {
System.out.println(ip.getFirstChild().getNodeValue());
ip.getFirstChild().setNodeValue("192.168.1.1");
}
if (ip.getNodeName() == "port") {
System.out.println(ip.getFirstChild().getNodeValue());
ip.getFirstChild().setNodeValue("10000");
}
}
}
}
}
WriteToXmlFile(document, "C://IPAndPort.xml");
}
/**
* 将修改后的xml内容写入到xml文件中
* @param document
* @param fileName
* @return
*/
public static boolean WriteToXmlFile(Document document, String fileName) {
boolean flag = false;
try {
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(fileName));
transformer.transform(source, result);
flag = true;
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
return flag;
}
}
大家要注意其中的对象的使用哦!不懂的多去查找相关的帮助文档。好了,今天就到这了,太晚了。下篇文章我将与大家分享一下java中xml的序列化与反序列化,感兴趣的朋友敬请期待吧!