Java DOM 解析器 - 查詢 XML 文件



Java DOM 解析器是 Java 中用於解析和查詢 XML 文件的 API。使用 Java DOM 解析器,我們可以查詢大型 XML 文件以獲取有關我們資料的資訊。手動檢查整個 XML 文件以獲取相關資訊並不容易。我們可以使用 getElementsByTagName() 方法根據其標籤名稱查詢 XML 元素。要根據屬性值查詢,可以使用 getAttribute() 方法。

使用 Java DOM 解析器查詢 XML

我們可以透過以下步驟在 Java 中使用 DOM 解析器查詢任何 XML 文件:

  • 步驟 1:建立 DocumentBuilder 物件
  • 步驟 2:讀取 XML
  • 步驟 3:解析 XML 文件
  • 步驟 4:查詢 XML 文件

請參閱此頁面瞭解前三個步驟。

步驟 4:查詢 XML 文件

在完成前三個步驟後,我們可以使用 DOM 方法根據我們的業務需求查詢 XML 文件。

按標籤名稱查詢元素

我們可以使用 Document 介面上的方法getElementsByTagName('carname')根據其標籤名稱查詢 XML 元素。此方法以字串形式獲取標籤名稱,並將具有相同標籤名稱的節點列表作為 NodeList 返回。

Node 介面的getTextContent()方法以字串形式提供節點內部的文字內容。

cars.xml

cars.xml 檔案在根元素<cars>內部有七個<carname>元素。

<?xml version = "1.0"?>
<cars>
      <carname company="Ferrari" >Ferrari 101</carname>
      <carname company="Lamborghini">Lamborghini 001</carname>
      <carname company="Lamborghini">Lamborghini 002</carname>
      <carname company="Lamborghini">Lamborghini 003</carname>
      <carname company="Bentley">Bentley 1</carname>
      <carname company="Bentley">Bentley 2</carname>
      <carname company="Bentley">Bentley 3</carname>
</cars>    

查詢 XML 元素

在以下程式中,我們將所有節點放入 nodeList 中,然後迭代每個節點以獲取文字內容並檢查它是否等於“Bentley 2”。如果找到,我們將在控制檯上列印已找到,否則列印未找到。

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import java.io.File;

public class QueryXMLDemo {

   public static void main(String argv[]) {
 
      try {
         
         //Creating a DocumentBuilder Object
         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
         DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
         
         //Reading the XML file
         File inputFile = new File("cars.xml");
         
         //Parsing the XML Document
         Document doc = dBuilder.parse(inputFile);
         
         //checking "Bentley 2" car
         int flag=0;
         NodeList nList = doc.getElementsByTagName("carname");
         for(int i=0;i<nList.getLength();i++) {
            if(nList.item(i).getTextContent().equals("Bentley 2")) {
            	System.out.println("Bentley 2 car is "+"found");
            	flag=1;
            	break;
            }
         }
         if(flag==0) {
            System.out.println("Bentley 2 car is "+"not found");        	 
         }
      } catch (Exception e) {e.printStackTrace();}
   }
}

輸出

由於存在“Bentley 2”汽車,因此顯示已找到。

Bentley 2 car is found

按屬性查詢元素

我們可以使用 Element 介面的getAttribute("Attribute_name")方法根據其屬性查詢元素。此方法將屬性名稱作為引數,並返回屬性的值。

示例

在以下程式中,我們已解析cars.xml檔案並在每次找到“Bentley”時遞增計數變數。

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
import java.io.File;

public class QueryXMLAttributes {

   public static void main(String argv[]) {
 
      try {
    	  
    	 //Creating a DocumentBuilder Object
         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
         DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
          
         //Reading the XML file
         File inputFile = new File("cars.xml");
         
         //Parsing the XML Document
         Document doc = dBuilder.parse(inputFile); 
         
         //counting Bentley cars
         int count=0;
         NodeList nList = doc.getElementsByTagName("carname");
         for(int i=0;i<nList.getLength();i++) {
        	Element ele = (Element) nList.item(i);
            if(ele.getAttribute("company").equals("Bentley")) {
            	count++;
            }
         }
         System.out.println("No of Bentley cars: "+ count);        	 
      } catch (Exception e) {e.printStackTrace();}
   }
}

輸出

以上程式計算 Bentley 汽車的數量並在控制檯上顯示。

No of Bentley cars: 3
廣告