很多朋友對DOM有感冒,這里我花了一些時間寫了一個小小的教程,這個能看懂,會操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不會有什么問題。
后附java代碼,也可以下載(可點擊這里入下載)導入到Eclipse或MyEclipse。


比如我們運行實例中的readByNode(Node node)方法,如果把類型斷碼if (node.getNodeType()==node.ELEMENT_NODE)注釋掉,你會發現會輸出以下內容:
節點名:#document節點類型:9節點值:null節點名:students節點類型:1節點值:null節點名:#text節點類型:3節點值:節點名:student節點類型:1節點值:null節點名:#text節點類型:3節點值:------部分控制臺內容已省略------
輸出內容包括文本類型(DOM會把空格也當做類型)和document類型及元素類型,如果只查找Element類型,可以使用判斷Node類型,這個我們一定要注意!
我們從結果可以看出來 Element實際上是”<>”內的值。
節點類型常量字段值可對照Java API文檔的Node”常量字段值“查看:

因為DOM修改是在內存中修改,要更新到xml文件中,必須使用Transformer寫入。除讀以外,其它的增、刪、改這些更新數據的操作必須Transformer更新到xml文件。
什么時候使用item(0)?當我們使用通過getElementsByTagName得到的是子元素的集合,如果這個子元素集合中只有一個元素時我們可以使用item(0),當然我們指定item(0),因為item(0)是第一個元素集合中的第一個元素。
如何刪除節點?首先要獲得要刪除的節點,然后再得到其父節點,再使用父節點的removeChild方法刪除要刪除節點,所以刪除是不能“自殺”
。
首先使用DOM的createElement方法創建各個元素,然后通過appendChild方法讓各個之間建立父子關系,這個關系不一定要從根節點開始,要看你如何增加,是否準確的找到插入位置就可以了。
-----------------------------------以下為xml代碼-----------------------------------
<?xml version="1.0" encoding="utf-8" ?><students><student id="001" sex="男"><name>周星馳</name><age>23</age><intro>這是一位成績很好的學生</intro></student><student id="002" sex="男"><name>劉德華</name><age>32</age><intro>他綜合能力很優秀</intro></student><student id="003" sex="女"><name>周惠敏</name><age>31</age><intro>長得漂亮</intro></student><student id="004" sex="男"><name>王五</name><age>37</age><intro>成績有點差</intro></student><student id="005" sex="男"><name>張三豐</name><age>26</age><intro>經常逃課</intro></student></students>
-----------------------------------以下為java代碼-----------------------------------
package com.xmltest;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;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.w3c.dom.NodeList;import org.xml.sax.SAXException;/** * <b>項目:</b>使用DOM進行xml文檔的crud(增刪改查)操作<br /> * <b>文件名:</b> Xml_Crud.java<br /> * <b>類名:</b> Xml_Crud<br /> * <b>包:</b> com.xmltest<br /> * <b>描述:</b> 一個xml簡單的crud操作<br /> * <hr /> * <div align="left"><font color="#FF0000"><strong>xml的crud增刪改查操作</strong></font></div> * <hr /> * <b>時間:</b> 2014-12-1 上午9:45:45<br /> * <b>Copyright:</b> 2014<br /> * @author javalittleman * @version V1.0 */public class Xml_Crud {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {File file = new File("src/student.xml");Document doc=doc(file);// 以下為【增/刪/改/查】操作// 【查】一:通過node遍歷// readByNode(doc);// 【查】二:通過傳入第幾個學生獲得該學生下的所有信息// read(doc, 1);/* 【查】三: * 通過傳入的學生姓名獲得該學生的所有信息 * 傳入的為name元素的文本值 */// read(doc,"劉德華");// 【刪】一:通過序號刪除// delete(doc, 1);// 【刪】二:通過學生姓名刪除// delete(doc, "張三豐");// 【增】:向xml中增加一個學生// creat(doc, "趙五", "男", "007", "21", "成績一般,上課不太專心");// 【改】一:根據student的id屬性修改xml文件 updata(doc, "003", "周小明");}public static void readByNode(Node node){// 遍歷時會把所有的text節點都輸出// 加上node.getNodeType()==node.ELEMENT_NODE可輸出元素節點 if (node.getNodeType()==node.ELEMENT_NODE) {System.out.轉載請注意出處或作者,謝謝!
新聞熱點
疑難解答