XML文檔,DOM解析

 DOM解析模型

<?xml version="1.0" encoding="UTF-8"?>
<memo>
	<note type="birthday">
		<name>張三</name>
		<sex>男</sex>
		<date>1984</date>
	</note>
		<note type="shop">
		<name>李四</name>
		<sex>男</sex>
		<date>1984</date>
	</note>
	<note type="go">
		<name>王五</name>
		<sex>男</sex>
		<date>1984</date>
	</note>
</memo>

 

package domTest;

import java.io.File;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomTest {
	public static void main(String[] args)  {
		File xmlFile = new File("C:"+File.separator+"Users"+File.separator+"357"+File.separator+"Downloads"+File.separator+"memo.xml");//C:\Users\357\Downloads
		DocumentBuilder builder = null;
		
		//聲明一個DocumentBuilderFactory對象,經過單例模式建立
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		try {
			builder = documentBuilderFactory.newDocumentBuilder();//取得默認的DocumentBuilder
			Document document = builder.parse(xmlFile);//解析文件
			Element root= document.getDocumentElement();//獲取根元素
			NodeList childNodes = root.getChildNodes();//得到根元素下的子節點
			for (int i = 0; i < childNodes.getLength(); i++) {//對每一個子節點進行判斷
				Node node = childNodes.item(i);
				if("note".equals(node.getNodeName())){//若是節點的名稱爲"note",則輸出note元素熟悉type
					System.out.println("\r\n 找到一篇日記,所屬分類;"+node.getAttributes().getNamedItem("type").getNodeValue()+".");
					NodeList nodeDetail = node.getChildNodes(); //得到<memo>下的節點
					for (int j = 0; j < nodeDetail.getLength(); j++) {
						//遍歷<memo>下的節點
						Node detail = nodeDetail.item(j);
						switch (detail.getNodeName()) {
						case "name":
							System.out.println("姓名:"+detail.getTextContent());
							break;
						case "sex":
							System.out.println("性別:"+detail.getTextContent());
							break;
						case "date":
							System.out.println("生日:"+detail.getTextContent());
							break;

						default:
							break;
						}
						
					}
						 
				}
			}
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
			
			
			
			
	
	}
}

3個步驟建立XML文件對應的Document對象:

1.獲取factory,代碼以下:java

    //聲明一個DocumentBuilderFactory對象,經過單例模式建立
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();node

2.獲取builder,代碼以下:dom

    DocumentBuilder   builder = documentBuilderFactory.newD ocumentBuilder();//取得默認的DocumentBuilder性能

3.解析爲Document對象, 代碼以下:ui

    Document document = builder.parse(xmlFile);//解析文件spa

 

XML有哪些解析技術?區別是上面?code

    有DOM,SAX,STAX等xml

    DOM:處理大型文件時 性能降低的很是厲害,DOM的樹結構暫用的內存較多,並且DOM必須在解析文件以前把整個文檔裝入內存。對象

    SAX:事件驅動的XML解析方式。順序讀取XML文件, 事件

相關文章
相關標籤/搜索