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()
● 第三步: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異常啥的;