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,得到了我们想要的结果。


           

猜你喜欢

转载自blog.csdn.net/qq_44919483/article/details/89466508