- 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