Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java xml文件解析


在 Java 中,解析 XML 文件有多种方式可供选择。以下是几种常见的 XML 文件解析方式,以及每种方式的步骤流程和示例代码。

假设我们有以下的 XML 文件(名为 "data.xml")作为示例:

<root>
    <person id="1">
        <name>John</name>
        <age>30</age>
    </person>
    <person id="2">
        <name>Jane</name>
        <age>25</age>
    </person>
</root>

使用 DOM (Document Object Model) 解析

DOM 解析方式将整个 XML 文档加载到内存中,以树状结构表示。它允许你在内存中直接访问 XML 的节点,并且支持增删改操作。

步骤流程:

  1. 创建一个 DocumentBuilderFactory 对象。
  2. 使用 DocumentBuilderFactory 创建一个 DocumentBuilder 对象。
  3. 使用 DocumentBuilder 解析 XML 文件,生成一个 Document 对象。
  4. Document 对象开始遍历 XML 树,通过节点间的关系获取需要的信息。

示例代码:

import org.w3c.dom.*;
import javax.xml.parsers.*;

public class DOMParserExample {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse("data.xml");

            NodeList personList = document.getElementsByTagName("person");
            for (int i = 0; i < personList.getLength(); i++) {
                Element person = (Element) personList.item(i);
                String id = person.getAttribute("id");
                String name = person.getElementsByTagName("name").item(0).getTextContent();
                String age = person.getElementsByTagName("age").item(0).getTextContent();
                System.out.println("Person ID: " + id);
                System.out.println("Name: " + name);
                System.out.println("Age: " + age);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用 SAX (Simple API for XML) 解析

SAX 解析方式是基于事件驱动的解析方式,它逐行扫描 XML 文档并触发相应的事件处理器。

步骤流程:

  1. 创建一个继承自 DefaultHandler 的事件处理器类,重写需要的事件处理方法。
  2. 创建一个 SAXParserFactory 对象。
  3. 使用 SAXParserFactory 创建一个 SAXParser 对象。
  4. 将事件处理器设置到 SAXParser 中。
  5. 使用 SAXParser 解析 XML 文件,触发事件处理器的相应方法。

示例代码:

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class SAXParserExample {
    public static void main(String[] args) {
        try {
            XMLReader xmlReader = XMLReaderFactory.createXMLReader();
            xmlReader.setContentHandler(new MyHandler());
            xmlReader.parse(new InputSource("data.xml"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class MyHandler extends DefaultHandler {
    private boolean inPerson = false;
    private String id, name, age;

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if (qName.equals("person")) {
            inPerson = true;
            id = attributes.getValue("id");
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        if (inPerson) {
            String data = new String(ch, start, length);
            if ("name".equals(currentElement)) {
                name = data;
            } else if ("age".equals(currentElement)) {
                age = data;
            }
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if (qName.equals("person")) {
            inPerson = false;
            System.out.println("Person ID: " + id);
            System.out.println("Name: " + name);
            System.out.println("Age: " + age);
        }
    }
}

使用 JAXB (Java Architecture for XML Binding) 解析

JAXB 是 Java 中的一个标准 API,用于将 XML 数据绑定到 Java 对象上,实现 XML 和 Java 对象之间的映射。

步骤流程:

  1. 创建一个 Java 类,表示 XML 中的数据结构,使用 JAXB 注解进行标记。
  2. 创建一个 JAXBContext 对象,指定要绑定的 Java 类。
  3. 使用 JAXBContext 创建一个 Unmarshaller 对象。
  4. 使用 Unmarshallerunmarshal 方法将 XML 文件解组成 Java 对象。

示例代码:

import javax.xml.bind.*;
import java.io.*;

@XmlRootElement
class Person {
    @XmlAttribute
    String id;
    String name;
    String age;
}

public class JAXBParserExample {
    public static void main(String[] args) {
        try {
            JAXBContext context = JAXBContext.newInstance(Person.class);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            Person person1 = (Person) unmarshaller.unmarshal(new File("data.xml"));

            System.out.println("Person ID: " + person1.id);
            System.out.println("Name: " + person1.name);
            System.out.println("Age: " + person1.age);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上是三种常见的 XML 文件解析方式。每种方式都有其优缺点,根据你的需求选择最合适的方式。

在Java中解析XML文件有多种方式,下面我会介绍几种常见的实现方式,包括使用DOM、SAX、JAXB和StAX。示例代码:Maven依赖: ...
在Java中解析XML有多种方式,以下是其中几种常见的实现方式,包括DOM解析、SAX解析、和StAX解析。示例代码:Maven依赖:Gra ...
在Java中,解析XML文件的三种主要方式是DOM(DocumentObjectModel),SAX(SimpleAPIforXML),以及 ...
在Java中解析HTML文件有多种方式,其中一些常用的方式包括使用原生的Java类库、Jsoup库和HTMLParser库。示例代码:Mav ...
在Java中解析Excel文件有多种方式,常用的包括ApachePOI、JExcelApi、JExcel等。步骤流程:添加依赖(Maven) ...