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