代碼如下:
package TestDemo;
import javax.naming.NameNotFoundException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
//當xml的編碼和java默認的不一樣時會出現錯誤
//通過DOM方式讀取xml文件
public class DcuDemo {
public static void dom1() throws Exception{
//先創建一個Documengtbuilderfactory對象
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
//創建一個documentBuilder對象
DocumentBuilder db=dbf.newDocumentBuilder();
//通過方法parse加載books.xml文件到當前頁面下
Document document=db.parse("books.xml");
//返回的是一個包含所有book節點的集合
NodeList booklist= document.getElementsByTagName("book");
//遍歷包含所有book節點的集合
for(int i=0;i<booklist.getLength();i++){
System.out.println("----開始第"+(i+1)+"本書的遍歷----");
//通過iteam方法獲取每一個book屬性
Node book=booklist.item(i);
//遍歷book的屬性
NamedNodeMap nnm= book.getAttributes();
System.out.println("第"+(i+1)+"本書共有"+ nnm.getLength()+"個屬性");
//接下來遍歷屬性
for(int q=0;q<nnm.getLength();q++){
Node node= nnm.item(q);
NodeList list= book.getChildNodes();
//獲取了屬性名
String str1=node.getNodeName();
System.out.println("屬性名爲:"+str1);
//獲取屬性值
String str2=node.getNodeValue();
System.out.println("屬性名值:"+str2);
//輸出節點的個數
System.out.println("第"+(i+1)+"本書的節點書爲:"+list.getLength());
//打印出節點名和節點值
for(int k=0;k<list.getLength();k++){
Node jiedian= list.item(k);
//只有當類型爲Node.ELEMENT_NODE才進行輸出
if(jiedian.getNodeType()==Node.ELEMENT_NODE){
//獲取節點名和節點值並輸出
String name=jiedian.getNodeName();
System.out.print(name+" ");
//因爲element類型value是null,所以不能通過getvalue方法進行讀取
// String value1=jiedian.getNodeValue();
// System.out.println("value");
//獲取節點值的方法並輸出、
// String value2= jiedian.getFirstChild().getNodeValue();
// System.out.println(value2);
//此方法將會獲取此節點下所有的節點值
String value3=jiedian.getTextContent();
System.out.println(value3);
}
}
}
System.out.println("----結束第"+(i+1)+"本書的遍歷----");
}
}
public static void main(String[] args) throws Exception{
dom1();
}
}