- 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