Java JDOM 解析器 - 查询 XML 文档



Java JDOM 解析器是一个 API,它包含用于从 XML 文件构建 JDOM 文档并查询相关信息的类和方法。在本章中,我们将使用 getText() 方法根据文本内容查询元素,并使用 getAttributeValue() 方法根据属性查询元素。

使用 JDOM 解析器查询 XML

以下是使用 JDOM 解析器查询 XML 文档需要遵循的步骤:

  • 步骤 1:创建 SAXBuilder 对象
  • 步骤 2:读取 XML
  • 步骤 3:解析 XML 文档
  • 步骤 4:查询元素

有关前三个步骤,请参考本章

步骤 4:查询元素

完成前三个步骤后,我们将获得一个 JDOM 文档。使用 org.jdom2 包中提供的类和方法,我们可以开始查询元素及其属性。

现在,我们将看到两个关于如何根据元素的文本内容和属性查询元素的示例。这两个示例都使用相同的 cars.xml 文件。

根据文本内容查询元素

我们可以通过首先使用 getRootElement() 方法获取根元素来根据其文本内容查询元素。获取根元素后,我们可以使用 getChildren() 函数获取所有子元素。然后,我们可以使用 getText() 方法根据文本内容查询元素。

示例

考虑以下包含具有 company 属性和文本内容的 carname 元素的 cars.xml 文件。现在,我们将查询此 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

根据属性查询元素

元素除了文本内容外,还可以具有属性。现在,让我们使用相同的 cars.xml 文件根据其 company 属性查询 carname 元素。

Element 类的 getAttributeValue("attr_name") 方法以字符串作为属性名称参数,并返回该属性的对应值。

示例

在以下 QueryAttributes.java 程序中,我们从 getChildren() 方法获取 carname 元素的列表。然后,我们迭代该列表,并在 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();
      }
   }
}

输出

计数值表示 XML 文件中 Bentley 汽车的数量,并打印到控制台上。

Total number of Bentley cars : 3
广告

© . All rights reserved.