DOM解析XML文件

  dom(Document Object Model) 文檔對象模型。

  DOM中主要包括五個對象:

    Document、Node、NodeList、Element、Attr下面對這五個元素一一分析:

  1,Document對象代表了整個xml文檔,xml所有的node都按一定的順序在document對象中排列成樹結構,通過遍歷該對象得到我們想要的內容。通過DocumentBuilder對象的parse(File file)方法可以將xml文件解析成document對象 ,通過DocumentBuilderFactory的newDocumentBuilder()來獲得DocumentBuilder對象,通過DocumentBuilderFactory的newInstance()方法來獲得DocumentBuilderFactory對象

DocumentBuilderFactory dbf = DocuemntBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document doc = db.parse(new File(""));

  除此之外,Document還可以創建其它節點的方法比如createAttribut()用來創建一個Attr對象。

createAttribute(String)  //用給定屬性名創建一個Attr對象,並可使用setAttributeNode()方法將其放置在Element上。
			cretaeElement(String)   //用給定標籤名創建一個Element對象
			createTextNode(String)   //用給定字符串創建一個Text對象
			getElementByTagName(String)   //返回NodeList對象,它包含了所有給定標籤名字的標籤
			getDocumentElement()    //返回這個DOM樹的根節點的Element對象

  2,Node對象是DOM結構中最為基本的對象,代表了文檔樹中的一個抽象的節點。主要有以下的方法:

appendChild(org.w3c.dom.Node)
			getFirstChild()   
			getLastChild()
			getNextSibling()  //返回在DOM樹這個節點的下一個兄弟節點
			getNodeName()   //返回節點名稱
			getNodeType()    //返回節點類型
			getNodeValue()  
			hasChildNodes() 
			hasAttributes()
			getOwnerDocument()  
			removeChild(Node)
			replaceChild(Node)

  3,NodeList,Node的List,主要兩個方法

getLength()
		Item(int)

  4,Element對象代表的是XML文檔中的標籤元素,繼承於Node,亦是Node的最主要的子對象。在標籤中可以包含有屬性,因而Element對象中有存取其屬性的方法,而任何Node中定義的方法,也可以用在Element對象上面。

getChildNodes()  //返回NodeList對象
		getElementByTagNames(String)   //返回NodeList對象
		getTagName()
		getAttribute(String)
		getAttributeNode(String)

  5,Attr Attr對象代表了某個標籤中的屬性

 實例:

<?xml version="1.0" standalone="yes"?>
<links>
	<link>
		<text>JSP Insider</text>
		<url newWindow="no">http://www.jspinsider.com</url>
		<author>JSP Insider</author>
		<date>
			<day>2</day>
			<month>1</month>
			<year>2001</year>
		</date>
		<description>A JSP information site.</description>
	</link>
	<link>
		<text>The makers of Java</text>
		<url newWindow="no">http://java.sun.com</url>
		<author>Sun Microsystems</author>
		<date>
			<day>3</day>
			<month>1</month>
			<year>2001</year>
		</date>
		<description>Sun Microsystem's website.</description>
	</link>
	<link>
		<text>The standard JSP container</text>
		<url newWindow="no">http://jakarta.apache.org</url>
		<author>Apache Group</author>
		<date>
			<day>4</day>
			<month>1</month>
			<year>2001</year>
		</date>
		<description>Some great software.</description>
	</link>
</links>

  

package com.zhy.spider.bean;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

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;

public class xmldisplay {
	public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
		//1,構建doc對象
		//創建DocumentBuilderFactory對象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//創建DocumentBuilder對象
		DocumentBuilder builder=factory.newDocumentBuilder();
		//將xml解析成doc對象
		Document doc=builder.parse("NewFile.xml");
		/*
		 * 調用normalize(),可以去掉XML文檔中作為格式化內容的空白而映射在DOM樹中的不必要的Text Node對象。
		 * 否則你得到的DOM樹可能並不如你所想象的那樣。特別是在輸出的時候,這個normalize()更為有用。
		 */
		doc.normalize();
		NodeList links =doc.getElementsByTagName("link"); 
		for (int i=0;i<links.getLength();i++){
			Element link=(Element) links.item(i);
			System.out.print("Content: ");
			System.out.println(link.getElementsByTagName("text").item(0).getFirstChild().getNodeValue());
			System.out.print("URL: ");
			System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue());
			System.out.print("Author: ");
			System.out.println(link.getElementsByTagName("author").item(0).getFirstChild().getNodeValue());
			System.out.print("Date: ");
			Element linkdate=(Element) link.getElementsByTagName("date").item(0);
			String day=linkdate.getElementsByTagName("day").item(0).getFirstChild().getNodeValue();
			String month=linkdate.getElementsByTagName("month").item(0).getFirstChild().getNodeValue();
			String year=linkdate.getElementsByTagName("year").item(0).getFirstChild().getNodeValue();
			System.out.println(day+"-"+month+"-"+year);
			System.out.print("Description: ");
			System.out.println(link.getElementsByTagName("description").item(0).getFirstChild().getNodeValue());
			System.out.println();
			} 
	}
}