当前位置:首页 > Java

java如何读取xml文件

2026-03-04 01:46:12Java

使用DOM解析XML

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

java如何读取xml文件

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类并重写方法实现自定义解析逻辑。

java如何读取xml文件

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进行绑定。

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需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…

如何编写java程序

如何编写java程序

安装开发环境 下载并安装JDK(Java Development Kit),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH正确设置。 选…

java如何输出数组

java如何输出数组

输出数组的方法 在Java中,输出数组内容有多种方式,具体取决于数组类型和输出格式需求。以下是几种常见的方法: 使用Arrays.toString()方法 适用于一维数组,直接调用Arrays.to…

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

java前景如何

java前景如何

Java 当前的市场需求 Java 在企业级开发、大数据、云计算等领域仍占据重要地位。许多大型企业(如银行、电商平台)依赖 Java 构建后端系统。招聘平台数据显示,Java 开发岗位数量稳定,尤其在…