- 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 文件並查詢其中的必要資訊。我們可以使用 DOM4J 的 Document 和 Element 介面的方法來查詢 XML 文件。elements() 方法檢索根元素的所有元素。使用 attributeValue() 方法,我們可以查詢元素的屬性。
使用 Java DOM4J 解析器查詢 XML
以下是使用 Java DOM4J 解析器查詢文件時使用的步驟:
- 步驟 1:建立 SAXReader 物件
- 步驟 2:讀取 XML 檔案
- 步驟 3:解析 XML
- 步驟 4:提取根元素
- 步驟 5:查詢文件
有關前四個步驟,請參考本節的解析 XML 文件章節。
步驟 5:查詢文件
在步驟 4 中提取根元素後,我們可以使用根元素查詢子元素。現在我們將透過查詢元素和屬性來查詢 XML 文件。
查詢元素
要獲取具有特定名稱的元素,我們可以使用 Element 介面的 elements() 方法,並將我們需要獲取的元素的名稱(以字串形式)作為引數傳遞給該方法。此方法返回具有相同名稱的元素列表。
Element 介面的 getData() 方法以字串形式返回文字資料。要根據其文字內容查詢元素,我們可以將此方法與 equals() 方法一起用於比較。
示例
以下是我們需要查詢的 cars.xml 檔案:
<?xml version = "1.0"?>
<cars>
<carname company="Ferarri" >Ferarri 101</carname>
<carname company="Lamborgini">Lamborgini 001</carname>
<carname company="Lamborgini">Lamborgini 002</carname>
<carname company="Lamborgini">Lamborgini 003</carname>
<carname company="Bentley">Bentley 1</carname>
<carname company="Bentley">Bentley 2</carname>
<carname company="Bentley">Bentley 3</carname>
</cars>
使用 QueryElements.java 程式,我們查詢 cars.xml 檔案以查詢是否存在“Bentley 2”汽車。我們從 elements() 方法獲取所有“carname”元素,並使用 getData() 方法比較文字內容。
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class QueryElements {
public static void main(String[] args) {
try {
//Creating SAXReader
SAXReader reader = new SAXReader();
//Reading the XML file
File inputFile = new File("cars.xml");
//Parsing the XML
Document document = reader.read(inputFile);
//Extracting the root
Element RootElement = document.getRootElement();
List<Element> elements = RootElement.elements("carname");
boolean found = false;
//Iterating over the List
for (Element ele : elements) {
if(ele.getData().equals("Bentley 2")) {
found = true;
}
}
if(found) {
System.out.println("Bentley 2 car is found");
}
else {
System.out.println("Bentley 2 car is not found");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
輸出
輸出視窗顯示文件中找到了“Bentley 2”汽車。
Bentley 2 car is found
查詢屬性
我們可以使用 attributeValue() 方法查詢 Element 介面的特定屬性。我們可以將屬性名稱(字串值)作為引數傳遞給此方法,它將值作為字串返回。
示例 1
以下 QueryAttributes.java 程式獲取“carname”元素的列表,並檢查其屬性“company”的值是否等於“Bentley”,如果相等則整數變數“count”遞增。
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 QueryAttributes {
public static void main(String[] args) {
try {
//Creating SAXReader
SAXReader reader = new SAXReader();
//Reading the XML file
File inputFile = new File("cars.xml");
//Parsing the XML
Document document = reader.read(inputFile);
//Extracting the root
Element RootElement = document.getRootElement();
List<Element> elements = RootElement.elements("carname");
int count = 0;
for (Element ele : elements) {
if(ele.attributeValue("company").equals("Bentley"))
count++;
}
System.out.println("No of Bentley cars found: " + count);
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
輸出
輸出視窗顯示在文件中找到的賓利汽車數量。
No of Bentley cars found: 3
示例 2
考慮以下 studentData.xml 檔案,其中根元素“class”內包含三個 student 元素。現在讓我們嘗試列印學號為 493 的學生的資訊。
<?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>
以下 QueryStudent.java 程式獲取根元素“class”的所有元素。它將學號屬性的值與“493”進行比較。如果匹配,則使用 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 QueryStudent {
public static void main(String[] args) {
try {
//Creating SAXReader
SAXReader reader = new SAXReader();
//Reading the XML file
File inputFile = new File("studentData.txt");
//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("----------------------------");
for (Element ele : elements) {
if(ele.attributeValue("rollno").equals("493")) {
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();
}
}
}
輸出
顯示學號為 493 的學生的所有詳細資訊。
Root element :class ---------------------------- Current Element :student Student roll no : 493 First Name : Vaneet Last Name : Gupta First Name : vinni Marks : 95