一.DOM簡介
文件物件模型 (Document Object Model, DOM):是 XML 文檔的編程介面,定義如何在程式中訪問和操作 XML 文檔,是與平台和語言無關的介面,以樹結構表示 XML 文檔,通過提供一組對象對 XML 文檔結構的訪問,定義用於訪問和操作 XML 文檔的 API。
編寫一個通過 DOM 訪問 XML 文檔的應用程式時需要: XML 解析器和DOM實現。使用 DOM 建立和操作 XML 文檔有助於避免:未封閉標籤和錯誤嵌套標籤。使用 DOM 能夠在資料庫和 XML 檔案之間輕鬆移動資訊。
二.XML文檔的樹結構
三.XML DOM對象
1.XML DOMDocument 對象
程式碼片段1:
BufferedReader in = new BufferedReader(new FileReader(“檔案名稱”));<br />DOMParser parser = new DOMParser();<br />parser.parse(new InputSource(in));<br />Document doc = parser.getDocument();
2.XML DOMNodeList 對象
3.XML DOMNode 對象
程式碼片段2:
NodeList nl = doc.getElementsByTagName("*");<br />Node n;<br />n = nl.item(0);<br />System.out.print(n.getNodeName());
4.XML DOMElement 對象
程式碼片段3:
NodeList nl = doc.getElementsByTagName("*");<br />Element e = (Element)nl.item(0);<br />System.out.println(e.getTagName()+<br />e.getFirstChild().getNodeValue());<br />NamedNodeMap nnm = e.getAttributes();
5.XML DOMAttribute 對象和XML DOMText 對象
程式碼片段4:
Attr attr;<br />NamedNodeMap nnm;<br />attr = (Attr)nnm.item(0);<br />System.out.print(" 屬性是:"+attr.getName()+" ="+attr.getValue());<br />
四.樣本
1.先建立一個XML文檔,存放在E盤根目錄下,內容如下:
student.xml
<?xml version="1.0" encoding="gb2312" ?><br /><roster><br /><student ID="s101"><br /><name>李華</name><br /><sex>男</sex><br /><birthday>1978.9.12</birthday><br /><score>92</score><br /><skill>Java</skill><br /><skill>Oracle</skill><br /><skill>C Sharp</skill><br /><skill>SQL Server</skill><br /></student><br /><student ID="s102"><br /><name>齊輝</name><br /><sex>女</sex><br /><birthday>1979.3.2</birthday><br /><score>90</score><br /><skill>Java</skill><br /><skill>Oracle</skill><br /></student><br /></roster><br />
2.Java實現是依靠xerces實現的,xerces.jarhttp://u.115.com/file/f180f6d662。用Eclipse需要把它加入到項目中。
Project->properties->java build path->libraries->add external jars->選擇檔案—>ok。
import java.io.*;<br />import org.w3c.dom.*;<br />import org.w3c.dom.Node;<br />import org.xml.sax.*;<br />import org.apache.xerces.parsers.*;</p><p>public class DOMSample<br />{<br /> static public void main(String[] argv)<br /> {<br /> try<br /> {<br /> //if (argv.length != 1)<br /> //{<br /> // System.err.println("Usage: java DOMSample filename");<br /> // System.exit(1);<br /> //}<br /> BufferedReader in = new BufferedReader(new FileReader("E:/student.xml"));<br /> DOMParser parser = new DOMParser();<br /> parser.parse(new InputSource(in));</p><p> Document doc = parser.getDocument();<br /> System.out.println("元素是: ");<br /> printElements(doc);<br /> System.out.println();<br /> System.out.println("每個元素的屬性是: ");<br /> printElementAttributes(doc);<br /> }<br /> catch (SAXException s)<br /> {<br /> System.out.println(s.toString());<br /> }<br /> catch (IOException e)<br /> {<br /> System.out.println(e.toString());<br /> }<br /> }</p><p> static void printElements(Document doc)<br /> {<br /> NodeList nl = doc.getElementsByTagName("*");<br /> Node n;<br /> for (int i=0;i<nl.getLength(); i++)<br /> {<br /> n = nl.item(i);<br /> System.out.print(n.getNodeName()+" ");<br /> }<br /> }</p><p> static void printElementAttributes(Document doc)<br /> {<br /> NodeList nl = doc.getElementsByTagName("*");<br /> Element e;<br /> Attr attr;<br /> NamedNodeMap nnm;<br /> String attrname;<br /> String attrval;<br /> int i,len;<br /> len = nl.getLength();<br /> for (int j=0;j < len;j++)<br /> {<br /> e = (Element)nl.item(j);<br /> System.out.println(e.getTagName()+":"+e.getFirstChild().getNodeValue());<br /> nnm = e.getAttributes();<br /> if (nnm != null)<br /> {<br /> for (i=0;i<nnm.getLength();i++)<br /> {<br /> attr = (Attr)nnm.item(i);<br /> attrname = attr.getName();<br /> attrval = attr.getValue();<br /> System.out.println(" 屬性是:"+attrname+" = "+attrval);<br /> }<br /> }<br /> }<br /> }<br />}<br />