Java Xml 简明教程
Java DOM4J Parser - Query XML Document
Java DOM4J解析器是一个开源Java库,可用于解析和查询XML文档中的必要信息。我们可以使用DOM4J的Document 和Element接口的方法查询XML文档。elements() 方法检索根元素的所有元素。使用attributeValue()方法,我们可以查询元素的属性。
Query XML Using Java DOM4J Parser
以下是在使用Java DOM4J解析器查询文档时使用的步骤:
-
*第 1 步:*创建 SAXReader 对象
-
*第 2 步:*读取 XML 文件
-
*第 3 步:*解析 XML
-
*第 4 步:*提取根元素
-
*步骤5:*查询文档
有关前四个步骤,请参阅本部分的 Parse XML Document 章。
Querying Elements
要使用特定名称获取元素,我们可以使用Element接口的 elements() 方法,并以字符串的形式将我们获取元素名称作为参数传递。此方法返回具有相同名称的元素列表。
Element接口的 getData() 方法以字符串形式返回文本数据。为了根据文本内容查询元素,我们可以将此方法与equals()方法一起用于比较。
Example
以下是用于查询的 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 文件,以查找是否存在“宾利 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();
}
}
}
Querying Attributes
我们可以使用 attributeValue() 方法查询 Element 接口的特定属性。我们可以传递一个字符串值作为此方法的参数,该字符串值是该属性的名称,它将该值作为字符串返回。
Example 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();
}
}
}
Example 2
考虑根元素“class”内的以下 studentData.xml 文件,其中包含三个 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();
}
}
}