当前位置:首页 > 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
分享给朋友:

相关文章

vue实现文件的上传

vue实现文件的上传

文件上传的基本实现 在Vue中实现文件上传通常结合HTML的<input type="file">元素和FormData对象。通过监听文件选择事件获取文件对象,再通过AJAX或axios发…

如何安装java

如何安装java

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

jquery文件

jquery文件

jQuery文件获取与使用 jQuery是一个快速、简洁的JavaScript库,简化了HTML文档遍历、事件处理、动画和Ajax交互。以下是获取和使用jQuery文件的方法。 下载jQuery文件…

如何删除java

如何删除java

卸载 Java 的步骤 Windows 系统: 打开控制面板,选择“程序和功能”或“卸载程序”,在列表中找到 Java 相关条目(如“Java Runtime Environment”或“Java D…

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io…

java如何创建包

java如何创建包

创建Java包的步骤 在Java中,包(package)用于组织和管理类文件,避免命名冲突。以下是创建Java包的详细方法: 定义包名 在Java源文件的开头使用package关键字声明包名。包名…