当前位置:编程学习 > XML/UML >>

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

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


[html] 
<?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 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文件,解析方法是相同的,只需要指定某一层的父节点即可。

      好了,不多说废话了,直接贴出解析类,说明我在这里就不写了,代码中都有


[java] 
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(

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,