01-DOM解析XML

自己動手編寫了一個person.xml文件,下面簡單的說一下怎麼用DOM解析該XML文件。

person.xml文件的 內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<People>
   <person id="1">
      <name>Bob</name>
      <age>22</age>
      <gender>male</gender>
   </person>
   
   <person id="2">
      <name>John</name>
      <age>23</age>
      <gender>female</gender>
   </person>
   
   <person id="3">
      <name>張三</name>
      <age>12</age>
      <gender>男</gender>
   </person>
</People>

新建一個java工程項目,這裏命名爲DOMXml項目,新建一個包名爲com.xbb.domxml,在包下新建一個java文件,XmlParseByDom.java,然後將person.xml文件copy到項目目錄下,項目結構如下圖示:

PersonParseByDom.java的內容如下:

package com.xbb.domxml;

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

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

public class PersonParseByDom {

	public static void main(String[] args) {
		
		//DocumentBuilderFactory和DocumentBuilder都是一個抽象類
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db ;
		//Document是一個接口
		Document doc;
		try {
			db = dbf.newDocumentBuilder();
			//綁定解析person.xml文件
			doc = db.parse("person.xml");
			//獲取person.xml文件中的所有<person>節點,返回類型爲NodeList節點集合,這是一個接口,裏面封裝了兩個方法,
			//一個是方法是public Node item(int index);返回指定位置的節點;另一個方法是public int getLength();返回節點結合包含                         //節點數。
			NodeList personList = doc.getElementsByTagName("person");
			//打印出person節點數
			System.out.println("共有" + personList.getLength() + "個person點");
			//遍歷每個person節點
			for (int i = 0; i < personList.getLength(); i++) {
				//獲取第i個person節點
				Node person = personList.item(i);
				System.out.println("-------------------");
				//打印person節點的id屬性
				System.out.println("第"+i+"個person的屬性"+person.getAttributes().item(0));
				//獲取person節點的子節點集合,此處注意空格也屬於一個子節點,類型爲Node.TEXT_NODE;而我們需要的是Node.ELEMENT_                                //NODE類型的子節點				
				NodeList personChilds = person.getChildNodes();
				System.out.println("共有"+personChilds.getLength()+"個子元素");
				for (int j = 0; j < personChilds.getLength(); j++) {
					if (personChilds.item(j).getNodeType() == Node.ELEMENT_NODE) {
						//打印每個子節點名字和值
						System.out.println(personChilds.item(j).getNodeName()+":"+personChilds.item(j).getFirstChild().getNodeValue());
					}
					
				}
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		
	}
}

代碼註釋已經解釋的比較詳細。

最後輸出結果爲:

介紹就到這裏了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章