Java Xml 简明教程
Java DOM4J Parser - Parse XML Document
Java DOM4J 解析器是 Java 中一个用于解析 XML 文档的 API。它从内置 SAX 解析器或 DOM 解析器创建 DOM4J 文档。获得文档后,我们可以使用 DOM4J Document 和 Element 接口的内置方法检索元素和属性的信息。
在本章中,我们使用 getRootElement() 提取文档的根元素,并使用 elements() 方法获取其所有子元素。
Parse XML Using Java DOM4J Parser
使用 Java DOM4J 解析器解析文档时,将使用以下步骤:
-
*第 1 步:*创建 SAXReader 对象
-
*第 2 步:*读取 XML 文件
-
*第 3 步:*解析 XML
-
*第 4 步:*提取根元素
-
*Step 5: *Retrieving Elements
Step 1: Creating SAXReader object
SAXReader 类用于从 XML 文件或流创建 DOM4J 文档。它具有自己的内置 SAX 解析器来解析文件。我们如下创建一个 SAXReader 对象:
SAXReader reader = new SAXReader();
Step 2: Reading the XML file
若要以字符串形式读取 XML 内容,我们可以使用 StringBuilder 类,然后再将其转换为字节流以创建 XML 文档。如果 XML 内容以文件形式提供,我们可以使用 java.io 的 File 类按如下方式读取它 −
File inputFile = new File("src/input.txt");
Step 3: Parsing the XML
若要分析 XML 文件,我们在步骤 1 中创建了 SAXReader 对象。使用 SAXReader 的 read() 方法,我们可以创建一个 DOM4J 文档,方法是将我们在步骤 2 中读取的文件作为参数传递,如下所示 −
Document document = reader.read(inputFile);
Retrieving the Root
Document 接口的 getRootElement() 方法以 Element 对象的形式返回文档的根元素。若要获取元素的名称,我们使用 Element 接口的 getName() 方法。它以字符串的形式返回元素的名称。
Example
我们要分析的 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();
}
}
}
Retrieving Attributes
Element 接口的 attributeValue() 方法以字符串的形式检索指定属性的值。如果该元素没有此类属性,则返回 null。如果未指定该属性的值,则返回一个空字符串。
Example
以下 RetrieveAttributes.java 程序使用 attributeValue() 方法,并检索所有学生元素的学号。
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();
}
}
}
所有学生的学号都显示在输出屏幕上。
Retrieving Element Text
Element 接口的 elements() 方法返回其中包含的元素列表。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();
}
}
}
Output
所有学生信息都显示在输出屏幕上。
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