xml的增刪改查,使用dom解析

在java中,javax.xml.transform包中的transformer類用於xml文件的document對象轉換爲xml格式進行輸出
在學習增刪改查之前,我們先要了解xml的回寫技術
1.對xml文檔進行加載
2.回寫xml,使用transfromer

首先我們要創建xml文檔,具體如下:

<?xml version="1.0" encoding="UTF-8"?>



<books>

  <book>

        <name> 高效java </name>

        <pirce>50 </pirce>

    </book>

    <book>

        <name>  java編程思想  </name>

            <pirce> 80  </pirce>

    </book>



</books>  

下面是   java代碼            
                                     

/**
 * 
 */
package com.effective_java;

import java.io.File;
import java.util.jar.Attributes.Name;

import javax.lang.model.element.Element;
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.w3c.dom.NodeList;

/**
 * 這段代碼的作用是對於xml的增刪該改查,使用的dom解析的方式
 *
 */
public class Model6 {

    public static void main(String[] args) throws Exception {

        //

        File file = new File("value1\\model.xml");
        // TODO 自動生成的方法存根
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();

        org.w3c.dom.Document document = builder.parse("value\\NewFile.xml");
        // 前三句是將文件加載到內存

        org.w3c.dom.Element newbook = document.createElement("book");// 創建了一個元素

        org.w3c.dom.Element root = document.getDocumentElement();

        root.appendChild(newbook);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();

        DOMSource domSource = new DOMSource(document);

        StreamResult streamResult = new StreamResult(file);

        transformer.transform(domSource, streamResult);
        // 最後實現回寫

        // 好的現在我們更改需求,對book增加子標籤<name>可以這麼坐
        org.w3c.dom.Element bookname = document.createElement("name");
        bookname.setTextContent("java編程詞典");
        newbook.appendChild(bookname);

        transformer.transform(domSource, streamResult);// 回寫

        // 那麼現在 我們再次學習設置新加入元素的屬性
        newbook.setAttribute("id", "text");

        transformer.transform(domSource, streamResult);// 回寫

        // 接着我們對元素進行修改分下面幾步
        // .查詢到指定元素(1:修改屬性的值2:修改文本內容)
        /**
         * 1加載資源 2得到相應節點 3回寫 上面的加載資源和回寫我們已經實現過了,現在我們都只是實現其關鍵部分
         */
        // 在這個例子中,我們以對書籍的pirce進行修改,將java編程思想價格降低到以前的80%;
        NodeList nodeList = document.getElementsByTagName("name");// 獲取到元素節點
        for (int i = 0; i < nodeList.getLength(); i++) {
            org.w3c.dom.Element element = (org.w3c.dom.Element) nodeList.item(i);
            if (element.getTextContent().equals("java編程思想")) {
                // 在xml中,我們可以看到pirce元素是element的兄弟的兄弟
                org.w3c.dom.Element pirce = (org.w3c.dom.Element) element.getNextSibling().getNextSibling();
                double d = Double.parseDouble(pirce.getTextContent());
                String string = Double.toString(d * 0.8);
                pirce.setTextContent(string);
                System.out.println(d);
                transformer.transform(domSource, streamResult);// 回寫
            }
        }
      //在實現了元素的修改過後,我們再來是想元素的刪除工作,在刪除中,
        //只能通過父親節點刪除子節點,所喲我們要直接找到被刪除節點的父節點
        //然後才能進新刪除
    /**
     * 同樣,我們也要加載到內存,然後進行查找,最後進行刪除
     * 在這裏,我們以實現刪除帶有java字樣的節點元素
     */
        NodeList no=document.getElementsByTagName("name");//進行全局定位,找到name節點
        for(int i=0;i<no.getLength();i++){
            org.w3c.dom.Element element1=(org.w3c.dom.Element)no.item(i);
            if(element1.getTextContent().contains("java")){
                              org.w3c.dom.Element element3=(org.w3c.dom.Element)element1.getParentNode();
                              element3.getParentNode().removeChild(element3);
                              i--;//對i進行修正
            }
            transformer.transform(domSource, streamResult);// 回寫
        }

    }

}
//本文章爲原創,如果有任何問題,請與本人聯繫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章