
- Java XML 教程
- Java XML 首頁
- Java XML 概述
- Java XML 解析器
- Java DOM 解析器
- Java DOM 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java SAX 解析器
- Java SAX 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- JDOM XML 解析器
- JDOM XML 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java StAX 解析器
- Java StAX 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java XPath 解析器
- Java XPath 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java DOM4J 解析器
- Java DOM4J 解析器
- 解析 XML 文件
- 查詢 XML 文件
- 建立 XML 文件
- 修改 XML 文件
- Java XML 有用資源
- Java XML - 問題與解答
- Java XML - 快速指南
- Java XML - 有用資源
- Java XML - 討論
Java DOM4J 解析器 - 解析 XML 文件
Java DOM4J 解析器是 Java 中用於解析 XML 文件的 API。它從內建的 SAX 解析器或 DOM 解析器建立 DOM4J 文件。獲取文件後,我們可以使用 DOM4J Document 和 Element 介面的內建方法檢索元素和屬性的資訊。
在本章中,我們使用了 getRootElement() 來提取文件的根元素,並使用 elements() 方法獲取其所有子元素。
使用 Java DOM4J 解析器解析 XML
以下是使用 Java DOM4J 解析器解析文件時使用的步驟:
- 步驟 1:建立 SAXReader 物件
- 步驟 2:讀取 XML 檔案
- 步驟 3:解析 XML
- 步驟 4:提取根元素
- 步驟 5:檢索元素
步驟 1:建立 SAXReader 物件
SAXReader 類用於從 XML 檔案或流建立 DOM4J 文件。它具有自己的內建 SAX 解析器來解析檔案。我們如下建立 SAXReader 物件:
SAXReader reader = new SAXReader();
步驟 2:讀取 XML 檔案
要將 XML 內容讀取為字串,我們可以使用 StringBuilder 類,然後將其轉換為 ByteStream 以建立 XML 文件。如果 XML 內容以檔案形式提供,我們可以使用 java.io 的 File 類讀取它,如下所示:
File inputFile = new File("src/input.txt");
步驟 3:解析 XML
要解析 XML 檔案,我們在步驟 1 中建立了 SAXReader 物件。使用 SAXReader 的 read() 方法,我們透過將步驟 2 中讀取的檔案作為引數傳遞來建立 DOM4J 文件,如下所示:
Document document = reader.read(inputFile);
步驟 4:提取根元素
需要從 DOM4J 文件中提取根元素才能獲取任何元素資訊。使用 Document 介面的 getRootElement() 方法,我們獲取根元素,如下所示:
Element RootElement = document.getRootElement();
步驟 5:檢索元素
在完成前四個步驟後,我們現在擁有了根元素來獲取其子元素的資訊。現在,我們將執行一些任務,例如檢索根元素、檢索屬性和檢索 XML 文件的元素文字,並提供示例。
檢索根元素
Document 介面的 getRootElement() 方法以 Element 物件的形式返回文件的根元素。要獲取元素的名稱,我們使用 Element 介面的 getName() 方法。它以字串的形式返回元素的名稱。
示例
我們需要解析的 studentData.xml 檔案如下所示:
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
RetrieveRoot.java 程式使用 SAXReader 讀取上述 studentData.xml 檔案並獲取 DOM4J 文件。獲取文件後,我們使用 getRootElement() 方法提取根元素。
import java.io.File; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class RetrieveRoot { public static void main(String[] args) { try { //Creating SAXReader SAXReader reader = new SAXReader(); //Reading the XML file File inputFile = new File("studentData.xml"); //Parsing the XML Document document = reader.read(inputFile); //Extracting the root Element RootElement = document.getRootElement(); //Printing the Root Element Name System.out.println("Root element Name :" + RootElement.getName()); } catch(Exception e) { e.printStackTrace(); } } }
輸出
根元素名稱“class”將顯示在輸出螢幕上。
Root element Name :class
檢索屬性
Element 介面的 attributeValue() 方法以字串的形式檢索指定屬性的值。如果該元素沒有這樣的屬性,則返回 null。如果屬性沒有指定值,則返回空字串。
示例
以下 RetrieveAttributes.java 程式使用 attributeValue() 方法並檢索所有 student 元素的學號。
import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class RetrieveAttributes { public static void main(String[] args) { try { //Creating SAXReader SAXReader reader = new SAXReader(); //Reading the XML file File inputFile = new File("studentData.xml"); //Parsing the XML Document document = reader.read(inputFile); //Extracting the root Element RootElement = document.getRootElement(); //Iterating over the List List<Element> elements = RootElement.elements(); System.out.println("Student Roll numbers - "); for (Element ele : elements) { System.out.println(ele.attributeValue("rollno") ); } } catch(Exception e) { e.printStackTrace(); } } }
所有學生的學號將顯示在輸出螢幕上。
輸出
Student Roll numbers - 393 493 593
檢索元素文字
Element 介面的 elements() 方法返回其中包含的 Element 列表。Element 介面的 elementText() 方法以字串的形式返回元素的文字內容。
import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class DemoParse { public static void main(String[] args) { try { //Creating SAXReader SAXReader reader = new SAXReader(); //Reading the XML file File inputFile = new File("studentData.xml"); //Parsing the XML Document document = reader.read(inputFile); //Extracting the root Element RootElement = document.getRootElement(); System.out.println("Root Element: " + RootElement.getName()); List<Element> elements = RootElement.elements(); System.out.println("---------------------------------"); //Iterating over the List for (Element ele : elements) { System.out.println("\nCurrent Element :" + ele.getName()); System.out.println("Student roll no : " + ele.attributeValue("rollno") ); System.out.println("First Name : " + ele.elementText("firstname")); System.out.println("Last Name : " + ele.elementText("lastname")); System.out.println("First Name : " + ele.elementText("nickname")); System.out.println("Marks : " + ele.elementText("marks")); } } catch (DocumentException e) { e.printStackTrace(); } } }
輸出
所有學生的資訊將顯示在輸出螢幕上。
Root Element: class --------------------------------- Current Element :student Student roll no : 393 First Name : dinkar Last Name : kad First Name : dinkar Marks : 85 Current Element :student Student roll no : 493 First Name : Vaneet Last Name : Gupta First Name : vinni Marks : 95 Current Element :student Student roll no : 593 First Name : jasvir Last Name : singn First Name : jazz Marks : 90