自己動手編寫了一個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();
}
}
}
代碼註釋已經解釋的比較詳細。
最後輸出結果爲:
介紹就到這裏了。