对XML进行DOM解析的增删改

book.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<bookshelf> <book> <bookname name="attribute1">C#</bookname> <auter>zhang3</auter> <price>27.0</price> <price>555.0</price> </book> <book> <bookname name="attribute2">C++</bookname> <auter>pj1</auter> <price>25.0</price> </book> </bookshelf>

对XML的增删改进行DOM解析

package cn.xml;

import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class ChangeXML {
    
    public static String conf="src/book.xml";
    //创建工厂
    public Document createDocument() throws Exception{
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=factory.newDocumentBuilder();
        Document document = builder.parse(conf);
        return document;
    }
    
    //添加元素
    @Test
    public void addElement() throws Exception{
        
        Document document = this.createDocument();
        Element book=(Element) document.getElementsByTagName("book").item(0);

        //创建节点
        Element price=document.createElement("price");
        price.setTextContent("555.0");
        
        //向book中添加新建的节点
        book.appendChild(price);
        
        //得到要添加新节点的元素位置
        Element auter=(Element) document.getElementsByTagName("auter").item(0);
        //往元素auter的前面插入新建的节点price
        book.insertBefore(price, auter);
        
        //写入节点
        TransformerFactory tffactory = TransformerFactory.newInstance();
        Transformer tf = (Transformer) tffactory.newTransformer();
        tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream(conf)));
    }
    
    
    //删除节点
    @Test
    public void deleteElement() throws Exception{
        
        Document document = this.createDocument();
        
        //获取要删除的父节点
        Element Parent=(Element) document.getElementsByTagName("book").item(0);
        //Parent.getParentNode();
        
        //获取要删除的节点
        Element node = (Element) document.getElementsByTagName("bookname").item(0);
        //删除节点
        Parent.removeChild(node);
        
        //写入节点
        TransformerFactory tffactory = TransformerFactory.newInstance();
        Transformer tf = (Transformer) tffactory.newTransformer();
        tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream(conf)));
    }
    
    //更新节点
    @Test
    public void updateElement() throws Exception{
        
        Document document = this.createDocument();
        //获取要更新的节点
        Element element=(Element) document.getElementsByTagName("bookname").item(0);
        //更新节点
        element.setTextContent("C#");  //添加内容
        element.setAttribute("id", "bookname");  //添加属性等
        
        //写入节点
        TransformerFactory tffactory = TransformerFactory.newInstance();
        Transformer tf = (Transformer) tffactory.newTransformer();
        tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream(conf)));
    }
}

 

posted on 2013-11-04 16:45  小-小鱼  阅读(345)  评论(0)    收藏  举报

导航