Java Xml 简明教程
Java JDOM Parser - Query XML Document
Java JDOM 解析器是一个 API,包含类和方法,用于从 XML 文件构建 JDOM 文档以查询相关信息。在本章中,我们将使用 getText() 方法按文本内容查询元素,并使用 getAttributeValue() 方法按属性查询元素。
Query XML Using JDOM Parser
以下是我们需要按照的步骤,使用 JDOM 解析器查询 XML 文档 −
-
*步骤 1:*创建 SAXBuilder 对象
-
步骤 2: 读取 XML
-
步骤 3: 解析 XML 文稿
-
步骤 4: 查询元素
就前三个步骤,请参阅 this chapter
Querying Elements by TextContent
我们可以通过先使用 getRootElement() 方法获取根元素,按元素的文本内容查询元素。获取根元素后,我们可以使用 getChildren() 函数获取所有子元素。然后,我们可以使用 getText() 方法按文本内容查询元素。
Example
考虑以下 cars.xml 文件,其中 carname 元素带有 company 属性和文本内容。现在,我们将查询此 XML 文件以查找“Bentley 2”汽车。
<?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>
在以下 QueryXMLElements.java 程序中,我们使用 SAXBuilder 解析 cars.xml 文件以查询所有 carname 元素。在 Element 列表中获取 carname 元素后,我们将迭代列表以查找“Bentley 2”汽车。
import java.io.File;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import java.util.List;
public class QueryXMLElements {
public static void main(String args[]) {
try {
//Creating a SAXBuilder Object
SAXBuilder saxBuilder = new SAXBuilder();
//Reading the XML
File inputFile = new File("cars.xml");
//Parsing the XML Document
Document document = saxBuilder.build(inputFile);
//Retrieving the Root Element
Element RootElement = document.getRootElement();
List<Element> carList = RootElement.getChildren("carname");
//Finding "Bentley 2" car in the list
boolean found=false;
for(int index=0; index<carList.size();index++) {
Element car = carList.get(index);
if(car.getText().equals("Bentley 2")) {
found=true;
break;
}
}
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();
}
}
}
输出窗口显示在 XML 文件中找到了“Bentley 2”汽车。
Bentley 2 car is found
Querying Elements by Attributes
元素可以具有文本内容以及属性。现在,我们使用相同的 cars.xml 文件按 company 属性查询 carname 元素。
Element 类的 getAttributeValue("attr_name") 方法以字符串参数的形式获取属性名称,并返回属性的相应值。
Example
在以下 QueryAttributes.java 程序中,我们从 getChildren() 方法中获取 carname Elements 列表。然后,我们迭代该列表,并在 company 属性值等于“Bentley”时增加计数。
import java.io.File;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import java.util.List;
public class QueryAttributes {
public static void main(String args[]) {
try {
//Creating a SAXBuilder Object
SAXBuilder saxBuilder = new SAXBuilder();
//Reading the XML
File inputFile = new File("cars.xml");
//Parsing the XML Document
Document document = saxBuilder.build(inputFile);
//Retrieving the Root Element
Element RootElement = document.getRootElement();
List<Element> carList = RootElement.getChildren("carname");
//Counting Bentley cars
int count=0;
for(int index=0; index<carList.size();index++) {
Element car = carList.get(index);
if(car.getAttributeValue("company").equals("Bentley")) {
count++;
}
}
System.out.println("Total number of Bentley cars : " + count);
} catch(Exception e) {
e.printStackTrace();
}
}
}