当前位置:首页 > Java

java如何读取xml文件

2026-03-04 01:46:12Java

使用DOM解析XML

DOM(Document Object Model)是一种基于树结构的解析方式,适合处理较小的XML文件。通过javax.xml.parsers.DocumentBuilder类加载XML文件并生成Document对象,之后可以通过节点遍历获取数据。

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

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

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

使用SAX解析XML

SAX(Simple API for XML)是一种基于事件驱动的解析方式,适合处理大型XML文件。通过继承org.xml.sax.helpers.DefaultHandler类并重写方法实现自定义解析逻辑。

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

public class SaxParserExample {
    public static void main(String[] args) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            parser.parse(new File("example.xml"), new DefaultHandler() {
                boolean isTitle = false;

                @Override
                public void startElement(String uri, String localName, String qName, Attributes attributes) {
                    if (qName.equalsIgnoreCase("title")) {
                        isTitle = true;
                    }
                }

                @Override
                public void characters(char[] ch, int start, int length) {
                    if (isTitle) {
                        System.out.println("Title: " + new String(ch, start, length));
                        isTitle = false;
                    }
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用StAX解析XML

StAX(Streaming API for XML)是一种拉模式解析方式,结合了DOM和SAX的优点。通过javax.xml.stream.XMLStreamReader逐行读取XML内容。

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.io.FileInputStream;

public class StaxParserExample {
    public static void main(String[] args) {
        try {
            XMLInputFactory factory = XMLInputFactory.newInstance();
            XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream("example.xml"));

            while (reader.hasNext()) {
                int event = reader.next();
                if (event == XMLStreamReader.START_ELEMENT && reader.getLocalName().equals("title")) {
                    System.out.println("Title: " + reader.getElementText());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用JAXB解析XML

JAXB(Java Architecture for XML Binding)通过注解将XML映射为Java对象,适合结构化数据绑定。需提前定义与XML结构对应的Java类并使用javax.xml.bind.JAXBContext进行绑定。

java如何读取xml文件

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.File;

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

            for (Book book : bookstore.getBooks()) {
                System.out.println("Title: " + book.getTitle());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

选择解析方式的建议

  • DOM:适用于小型XML文件,需频繁修改或随机访问节点。
  • SAX:适用于大型XML文件,内存占用低但只能单向解析。
  • StAX:平衡内存和灵活性,支持双向解析。
  • JAXB:适合结构化数据绑定,需提前定义Java类。

根据实际需求选择合适的方法,若需高性能优先考虑SAX或StAX,若需便捷性可选JAXB。

标签: 文件java
分享给朋友:

相关文章

如何安装java

如何安装java

下载Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK下载页面,选择适合操作系统的版本(Windows、macOS或Linux)。推荐下载最新的长期支持(LTS)版本,如Java…

如何编写java

如何编写java

编写Java程序的基本步骤 安装Java开发工具包(JDK),确保系统环境变量配置正确。可以从Oracle官网下载最新版本的JDK并进行安装。 选择一个合适的集成开发环境(IDE),如Eclipse…

java如何导包

java如何导包

导入包的方法 在Java中,导入包(package)可以通过import语句实现,用于引入其他类或包中的功能。以下是几种常见的导包方式: 导入单个类 import java.util.ArrayL…

java如何连接mysql

java如何连接mysql

连接 MySQL 数据库的基本步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,在 pom.xml 中添加以下依赖: <dependency…

vue 实现文件目录

vue 实现文件目录

Vue 实现文件目录结构 Vue 项目通常采用模块化设计,合理的目录结构有助于代码维护和团队协作。以下是常见的 Vue 项目目录结构及说明: 基础目录结构(基于 Vue CLI 生成) proje…

vue文件底层实现

vue文件底层实现

Vue 文件的底层实现 Vue 单文件组件(SFC,即 .vue 文件)的底层实现依赖于 Vue 的编译工具链,主要包括 @vue/compiler-sfc 和构建工具(如 Vite 或 Webpac…