下面给出一段用于解析的 XML 片段:

<?xml version="1.0" encoding="UTF-8"?>   
 <books>   
   <book id="001">   
      <title>Harry Potter</title>   
      <author>J K. Rowling</author>   
   </book>   
   <book id="002">   
      <title>Learning XML</title>   
      <author>Erik T. Ray</author>   
   </book>   
 </books>
 


  DOM 解析 XML

  Java 中的 DOM 接口简介: JDK 中的 DOM API 遵循 W3C DOM 规范,其中 org.w3c.dom 包提供了 Document、DocumentType、Node、NodeList、Element 等接口, 这些接口均是访问 DOM 文档所必须的。我们可以利用这些接口创建、遍历、修改 DOM 文档。

  javax.xml.parsers 包中的 DoumentBuilder 和 DocumentBuilderFactory 用于解析 XML 文档生成对应的 DOM Document 对象。

  javax.xml.transform.dom 和 javax.xml.transform.stream 包中 DOMSource 类和 StreamSource 类,用于将更新后的 DOM 文档写入 XML 文件。

  下面给出一个运用 DOM 解析 XML 的例子:

import java.io.File;   
import java.io.IOException;   
import javax.xml.parsers.DocumentBuilder;   
import javax.xml.parsers.DocumentBuilderFactory;   
import javax.xml.parsers.ParserConfigurationException;   
import org.w3c.dom.Document;   
import org.w3c.dom.Element;   
import org.w3c.dom.Node;   
import org.w3c.dom.NodeList;   
import org.xml.sax.SAXException;   
 
public class DOMParser {   
  DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();   
  //Load and parse XML file into DOM   
  public Document parse(String filePath) {   
     Document document = null;   
     try {   
        //DOM parser instance   
        DocumentBuilder builder = builderFactory.newDocumentBuilder();   
        //parse an XML file into a DOM tree   
        document = builder.parse(new File(filePath));   
     } catch (ParserConfigurationException e) {   
        e.printStackTrace();    
     } catch (SAXException e) {   
        e.printStackTrace();   
     } catch (IOException e) {   
        e.printStackTrace();   
     }   
     return document;   
  }   
 
  public static void main(String[] args) {   
        DOMParser parser = new DOMParser();   
        Document document = parser.parse("books.xml");   
        //get root element   
        Element rootElement = document.getDocumentElement();   
 
        //traverse child elements   
        NodeList nodes = rootElement.getChildNodes();   
        for (int i=0; i < nodes.getLength(); i++)   
        {   
           Node node = nodes.item(i);   
           if (node.getNodeType() == Node.ELEMENT_NODE) {     
              Element child = (Element) node;   
              //process child element   
           }   
        }   
 
        NodeList nodeList = rootElement.getElementsByTagName("book");   
        if(nodeList != null)   
        {   
           for (int i = 0 ; i < nodeList.getLength(); i++)   
           {   
              Element element = (Element)nodeList.item(i);   
              String id = element.getAttribute("id");   
           }   
        }   
  }   
}