1. 程式人生 > 其它 >XML四:如何使用Java操作XML?使用Dom4j讀取XML文件

XML四:如何使用Java操作XML?使用Dom4j讀取XML文件

技術標籤:JavaWeb基礎(網頁搭建與JavaWeb基礎)

利用Dom4j讀取XML文件:

XML文件:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 人力資源管理系統-->
 <!--xmlns:xsi的意思是告訴XML文件,我們的約束是使用Schema;xsi:noNamespaceSchemaLocation:指向xsd檔案-->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr-schema.xsd" >  
	<employee no="3306">   <!-- 標籤和屬性儘量起的有意義,做到見名知意-->
		<name>張三</name>
		<age>31</age>
		<salary>4000</salary>
		<department>    <!-- 標籤可以巢狀-->
			<dName>會計</dName>
			<dAddress>4樓103室</dAddress>
		</department>
	</employee>
	<employee no="3377">
		<name>李四</name>
		<age>29</age>
		<salary>5000</salary>
		<department>
			<dName>工程部門</dName>
			<dAddress>4樓105室</dAddress>
		</department>
	</employee>

</hr>

讀取的方法:

核心,利用Dom4j讀取XML文件:下面是標準程式,以後記不清時,可以當成字典查閱、參考,慢慢熟練就好了;

/**
 *     讀取hr.xml
 * @author Administrator
 *
 */
public class HrReader {
	
	public void readXml() {
		String file = "e:/eclipse-workspace/xml/src/hr-schema.xml";
		//(1) SAXReader是讀取XML檔案的核心類,用於將XML解析後以“樹”的形式儲存在記憶體中。
		SAXReader reader = new SAXReader();
		try {
			// (2) SAXReader類的主要方法時read()方法,該方法返回一個Document物件;
			Document document = reader.read(file);
			// (3) 獲取XML文件的根節點;Dom4j中所有的標籤都是用Element型別來進行的包裝;
			Element root = document.getRootElement();
			// (4) Element型別的root物件,可以呼叫elements()方法,獲取指定的標籤集合;下面就是獲取根節點標籤下所有標籤名為“employee”的標籤的Element集合
			List<Element> employees = root.elements("employee");
			//
			for(Element employee : employees) {
				// (5) element()方法用於獲取唯一的子節點物件
				Element name = employee.element("name");
				// (6) getText()方法,用於獲取name標籤的文字值;
				String empName = name.getText();
				System.out.println(empName);
				
				//簡寫:輸出age,salary
				System.out.println(employee.element("age").getText());
				System.out.println(employee.element("salary").getText());
				// 獲取department節點的內容;department節點下還有子節點,所以需要多處理一步
				Element department = employee.element("department");
				System.out.println(department.element("dName").getText());
				System.out.println(department.element("dAddress").getText());
				
				// (7) 獲取屬性 :又一次印證了,DOM在處理XML的時候,遵循一切皆物件;這樣挺好
				Attribute att = employee.attribute("no");
				System.out.println(att.getText());
				
			}
				
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	// 測試一下
	public static void main(String[] args) {
		new HrReader().readXml();
	}
}

結果:

歸納:上述讀取過程歸納如下(很囉嗦,這兒可以稍微瞅一瞅)

● 整個XML被讀成了一個Document物件;所有的節點(包括父節點和子節點)被讀成了Element物件;

● 第零步:String file = "e:/eclipse-workspace/xml/src/hr-schema.xml";確定,待讀XML文件的路徑

● 第一步:SAXReader reader = new SAXReader(); 獲得SAXReader類物件

● 第二步:Document document = reader.read(file); 呼叫SAXReader類的read()

方法獲得,獲得(整個XML檔案)Document物件

● 第三步:Element root = document.getRootElement(); 呼叫Document物件的getRootElement()方法獲得根節點物件,作為一個Element(元素)物件

● 第四步:List<Element> employees = root.elements("employee"); 通過呼叫Element的elements()方法,獲得所有指定標籤的Element物件的集合

● 第五步:Element name = employee.element("name"); 通過呼叫Element的element()方法,獲得(唯一)子節點Element物件

● 第六步:String empName = name.getText(); Element的getText()方法,獲得標籤物件的文字值;

核心就是上面幾個步驟,看看就行,主要還是參考上述示例程式碼;

● 獲取屬性,第一步:Attribute att = employee.attribute("no"); 通過,ELement的attribute()方法獲得employee標籤中,"no"屬性的Attribute物件

● 獲取屬性,第二步:System.out.println(att.getText()); 通過Attribute的geText()方法,獲得屬性值


注意:上述過程會丟擲DocumentException異常,需要處理;為了安全起見也可以加個IO異常啥的;