Java 提供了多种解析 XML 的方式,其中常用的有两种:DOM 和 SAX。

  1. DOM 解析XML

DOM (Document Object Model) 解析方式是最常用的解析 XML 的方法之一,它将整个 XML 文档解析为一个树形结构,可以方便地对 XML 文档进行增、删、改、查等操作。

DOM 解析 XML 的步骤如下:

  1. 创建 DocumentBuilderFactory 对象,用于创建 DocumentBuilder 对象。

  2. 创建 DocumentBuilder 对象,用于解析 XML 文档,并返回一个 Document 对象。

  3. 通过 Document 对象访问 XML 文档中的元素。

示例代码:

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

public class DomParserExample {

    public static void main(String[] args) {
        try {
            // 1. 创建 DocumentBuilderFactory 对象
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            // 2. 创建 DocumentBuilder 对象
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            // 3. 解析 XML 文档并返回一个 Document 对象
            Document doc = dBuilder.parse('employees.xml');
            // 获取 XML 文档中的元素
            NodeList nodeList = doc.getElementsByTagName('employee');
            for (int i = 0; i < nodeList.getLength(); i++) {
                Element element = (Element) nodeList.item(i);
                String id = element.getAttribute('id');
                String firstName = element.getElementsByTagName('firstName').item(0).getTextContent();
                String lastName = element.getElementsByTagName('lastName').item(0).getTextContent();
                String salary = element.getElementsByTagName('salary').item(0).getTextContent();
                System.out.println('Employee ID: ' + id);
                System.out.println('First Name: ' + firstName);
                System.out.println('Last Name: ' + lastName);
                System.out.println('Salary: ' + salary);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. SAX 解析XML

SAX (Simple API for XML) 解析方式是基于事件驱动的解析方法,它逐行读取 XML 文档,当遇到 XML 文档的节点时触发事件,可以通过实现相应的事件处理器来对事件进行处理。

SAX 解析 XML 的步骤如下:

  1. 创建 SAXParserFactory 对象,用于创建 SAXParser 对象。

  2. 创建 SAXParser 对象,用于解析 XML 文档。

  3. 实现 DefaultHandler 接口,并重写相应的方法来处理 XML 文档中的事件。

示例代码:

import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxParserExample {

    public static void main(String[] args) {
        try {
            // 1. 创建 SAXParserFactory 对象
            SAXParserFactory factory = SAXParserFactory.newInstance();
            // 2. 创建 SAXParser 对象
            SAXParser saxParser = factory.newSAXParser();
            // 3. 解析 XML 文档并设置事件处理器
            saxParser.parse(new File('employees.xml'), new EmployeeHandler());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class EmployeeHandler extends DefaultHandler {

    boolean bFirstName = false;
    boolean bLastName = false;
    boolean bSalary = false;

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if (qName.equalsIgnoreCase('employee')) {
            String id = attributes.getValue('id');
            System.out.println('Employee ID: ' + id);
        } else if (qName.equalsIgnoreCase('firstName')) {
            bFirstName = true;
        } else if (qName.equalsIgnoreCase('lastName')) {
            bLastName = true;
        } else if (qName.equalsIgnoreCase('salary')) {
            bSalary = true;
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        if (bFirstName) {
            System.out.println('First Name: ' + new String(ch, start, length));
            bFirstName = false;
        } else if (bLastName) {
            System.out.println('Last Name: ' + new String(ch, start, length));
            bLastName = false;
        } else if (bSalary) {
            System.out.println('Salary: ' + new String(ch, start, length));
            bSalary = false;
        }
    }
}
Java XML 解析教程:DOM 和 SAX 方法详解

原文地址: https://www.cveoy.top/t/topic/luNE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录