歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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();
      }
    }

相關系列閱讀:

  • Java操作XML文件--讀取內容 http://www.linuxidc.com/Linux/2013-08/88804.htm
  • Java操作XML文件--修改節點 http://www.linuxidc.com/Linux/2013-08/88805.htm
Copyright © Linux教程網 All Rights Reserved