Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java解析xml获取标签属性值


在 Java 中解析 XML 并获取标签属性值有多种实现方式。以下将介绍三种常用的方式:DOM 解析、SAX 解析和使用第三方库(例如,JAXB)。

DOM 解析

DOM(Document Object Model)解析器会将整个 XML 文档加载到内存中,并创建一个树形结构,使您可以通过访问节点来检索和修改 XML 数据。

步骤流程:

  1. 导入所需的包和类。
  2. 创建一个 DocumentBuilderFactory 对象,以获取 DocumentBuilder。
  3. 从 DocumentBuilder 中解析 XML 文件,生成一个 Document 对象。
  4. 从 Document 对象中获取所需的标签,并使用 getAttribute() 方法获取属性值。

示例代码:

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

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

            Element root = document.getDocumentElement();
            NodeList nodeList = root.getElementsByTagName("book");

            for (int i = 0; i < nodeList.getLength(); i++) {
                Element book = (Element) nodeList.item(i);
                String title = book.getAttribute("title");
                System.out.println("Title: " + title);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

SAX 解析

SAX(Simple API for XML)解析器是一种事件驱动的解析方式,它在解析 XML 文件时逐行读取,不会将整个文档加载到内存中。

步骤流程:

  1. 导入所需的包和类。
  2. 创建一个 SAXParserFactory 对象,以获取 SAXParser。
  3. 实现自定义的 DefaultHandler,重写 startElement() 方法以获取标签属性值。
  4. 将自定义的 DefaultHandler 对象传递给 SAXParser 解析 XML。

示例代码:

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

public class SAXParserExample {
    public static void main(String[] args) {
        try {
            File xmlFile = new File("example.xml");
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();

            DefaultHandler handler = new DefaultHandler() {
                @Override
                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                    if (qName.equals("book")) {
                        String title = attributes.getValue("title");
                        System.out.println("Title: " + title);
                    }
                }
            };

            parser.parse(xmlFile, handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用 JAXB(Java Architecture for XML Binding)

JAXB 是 Java 提供的用于将 XML 数据绑定到 Java 对象的技术,通过注解可以轻松地将 XML 格式转换为 Java 对象。

步骤流程:

  1. 导入所需的包和类。
  2. 创建 Java 类,并使用 JAXB 注解来映射 XML 标签和属性。
  3. 使用 JAXB 提供的上下文来将 XML 文件解组成 Java 对象。
  4. 从解组后的 Java 对象中获取所需的属性值。

示例代码:

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

@XmlRootElement
class Book {
    @XmlAttribute
    String title;

    public String getTitle() {
        return title;
    }
}

public class JAXBExample {
    public static void main(String[] args) {
        try {
            File xmlFile = new File("example.xml");
            JAXBContext context = JAXBContext.newInstance(Book.class);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            Book book = (Book) unmarshaller.unmarshal(xmlFile);

            String title = book.getTitle();
            System.out.println("Title: " + title);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Maven 和 Gradle 依赖坐标:

DOM 解析

  • Maven:
<dependency>
    <groupId>org.w3c.dom</groupId>
    <artifactId>org.w3c.dom</artifactId>
    <version>1.0.1</version>
</dependency>
  • Gradle:
implementation 'org.w3c.dom:org.w3c.dom:1.0.1'

SAX 解析

  • Maven:
<dependency>
    <groupId>org.xml.sax</groupId>
    <artifactId>org.xml.sax</artifactId>
    <version>2.2.1</version>
</dependency>
  • Gradle:
implementation 'org.xml.sax:org.xml.sax:2.2.1'

JAXB

  • Maven:
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.4.0-b180830.0359</version>
</dependency>
  • Gradle:
implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'

请注意,以上示例代码和依赖坐标中的版本号可能会随着时间的推移而有所更改。确保使用最新的版本,可以从相应的仓库或官方网站获取更新的信息。

在Java中解析XML有多种方式,以下是其中几种常见的实现方式,包括DOM解析、SAX解析、和StAX解析。示例代码:Maven依赖:Gra ...
在Java中解析XML文件有多种方式,下面我会介绍几种常见的实现方式,包括使用DOM、SAX、JAXB和StAX。示例代码:Maven依赖: ...
xml")作为示例:###使用DOM(DocumentObjectModel)解析DOM解析方式将整个XML文档加载到内存中,以树状结构表示 ...
在Java中,解析XML文件的三种主要方式是DOM(DocumentObjectModel),SAX(SimpleAPIforXML),以及 ...
以下是两种主要的方式,一种是使用Java的内置反射机制,另一种是使用第三方库ApacheCommonsBeanUtils。###使用Apac ...