1. 程式人生 > >xml-使用dom去遍歷xml檔案和獲取指定節點資訊

xml-使用dom去遍歷xml檔案和獲取指定節點資訊

classes.xml:
<?xml version="1.0" encoding="utf-8" ?>
<class>
<stu hobby="read">
	<name>楊過</name>
	<sex>男</sex>
	<age>30</age>
	<intro>學習刻苦</intro>
</stu>
<stu>
	<name>林青霞</name>
	<sex>女</sex>
	<age>32</age>
	<intro>是一個好學生</intro>
</stu>
</class>
TestXml1.java
package com.hyj;

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;

public class TestXml1 {
	public static void main(String []args) throws Exception{
		//建立一個DocumentBuilderFactory,得到建立DOM解析器工廠
		DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
		//通過DocumentBuilderFactory,得到一個DocumentBuilder物件(解析器物件)
		DocumentBuilder dBuilder=dbf.newDocumentBuilder();
		//指定解析哪個xml檔案
		Document document=dBuilder.parse("src/classes.xml");

//		System.out.println(document);
		read(document);
	}
	
//	static boolean flag=false;
	//具體的查詢某個學生的資訊(先手第一個學生的所有資訊)
	//請考慮如何獲得某個元素的屬性值,(取出)
	public static void read(Document doc){
		NodeList n1=doc.getElementsByTagName("stu");
		//取出第一個學生
		Element stu=(Element)n1.item(0);
		System.out.println("學生的愛好是"+stu.getAttribute("hobby"));
		Element name=(Element) stu.getElementsByTagName("name").item(0);
		System.out.println(name.getTextContent());
		
		
//		//獲得名為stu的節點
//		NodeList nodelist=doc.getElementsByTagName("stu");
//		//分別學生的node
//		for(int a=0;a<nodelist.getLength();a++){
//			Node node=nodelist.item(a);
//			NodeList chilenodelist=node.getChildNodes();
//			for(int b=0;b<chilenodelist.getLength();b++){
//				if(chilenodelist.item(b).getNodeType()==chilenodelist.item(b).ELEMENT_NODE){
//					System.out.println(chilenodelist.item(b).getNodeName()+" : "+chilenodelist.item(b).getTextContent());
//
//				}
//			}
//			System.out.println("----------------------------------------");
//		}
		
//		System.out.println(nodelist.getLength());
		
		
		
		
		//取出node的子節點
//		NodeList nodelist=node.getChildNodes();
//		for(int i=0;i<nodelist.getLength();i++){
//			//再去顯示
//			Node n=nodelist.item(i);
//			if(n.getNodeName().equals("stu")){
//				flag=true;
//				read(n);
//				flag=false;
//			}
//			if(flag==true&&n.getNodeType()==n.ELEMENT_NODE)System.out.println(n.getNodeName());
//			read(n);
//		}

	}
	
	
	//遍歷該xml檔案
	public static void list(Node node){
		if(node.getNodeType()==node.ELEMENT_NODE)
		System.out.println("名字:"+node.getNodeName());
		//取出node的子節點
		NodeList nodelist=node.getChildNodes();
		for(int i=0;i<nodelist.getLength();i++){
			//再去顯示
			Node n=nodelist.item(i);
			list(n);
		}
	}
}