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
廣告