当前位置:首页 > Java > 正文

Java语言XML处理教程(从零开始掌握Java解析XML的常用方法)

在现代软件开发中,Java XML解析 是一项非常实用的技能。无论是读取配置文件、处理Web服务返回的数据,还是与其他系统交换信息,XML(可扩展标记语言)都扮演着重要角色。本教程将带你从零开始,用通俗易懂的方式学习如何在Java中处理XML。

什么是XML?

XML(Extensible Markup Language)是一种用于存储和传输数据的标记语言。它结构清晰、易于阅读,且与平台无关。一个简单的XML示例如下:

<?xml version="1.0" encoding="UTF-8"?><books>  <book id="1">    <title>Java编程思想</title>    <author>Bruce Eckel</author>    <price>89.00</price>  </book>  <book id="2">    <title>Effective Java</title>    <author>Joshua Bloch</author>    <price>79.00</price>  </book></books>

Java中处理XML的常见方式

Java提供了多种解析XML的方式,最常用的有以下两种:

  • DOM(Document Object Model)解析:将整个XML文档加载到内存中,形成树状结构,便于随机访问和修改。
  • SAX(Simple API for XML)解析:基于事件驱动的流式解析,适合处理大型XML文件,内存占用小。
Java语言XML处理教程(从零开始掌握Java解析XML的常用方法) Java XML解析 DOM解析XML Java处理XML SAX解析XML 第1张

1. 使用DOM解析XML

DOM解析适合小型XML文件,因为它会把整个文档加载进内存。下面是一个使用DOM读取上面XML文件的完整示例:

import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import java.io.File;public class DOMExample {    public static void main(String[] args) {        try {            File xmlFile = new File("books.xml");            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();            DocumentBuilder builder = factory.newDocumentBuilder();            Document doc = builder.parse(xmlFile);            doc.getDocumentElement().normalize();            NodeList bookList = doc.getElementsByTagName("book");            for (int i = 0; i < bookList.getLength(); i++) {                Node bookNode = bookList.item(i);                if (bookNode.getNodeType() == Node.ELEMENT_NODE) {                    Element bookElement = (Element) bookNode;                    String title = bookElement.getElementsByTagName("title").item(0).getTextContent();                    String author = bookElement.getElementsByTagName("author").item(0).getTextContent();                    String price = bookElement.getElementsByTagName("price").item(0).getTextContent();                    System.out.println("书名: " + title + ", 作者: " + author + ", 价格: " + price);                }            }        } catch (Exception e) {            e.printStackTrace();        }    }}

这段代码会输出:

书名: Java编程思想, 作者: Bruce Eckel, 价格: 89.00书名: Effective Java, 作者: Joshua Bloch, 价格: 79.00

2. 使用SAX解析XML

SAX解析是事件驱动的,不会将整个文档加载到内存。你需要实现一个Handler来响应解析过程中的事件(如开始标签、结束标签、文本内容等)。

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 SAXExample {    public static void main(String[] args) {        try {            SAXParserFactory factory = SAXParserFactory.newInstance();            SAXParser saxParser = factory.newSAXParser();            BookHandler handler = new BookHandler();            saxParser.parse(new File("books.xml"), handler);        } catch (Exception e) {            e.printStackTrace();        }    }}class BookHandler extends DefaultHandler {    private boolean isTitle = false;    private boolean isAuthor = false;    private boolean isPrice = false;    @Override    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        if (qName.equalsIgnoreCase("title")) isTitle = true;        else if (qName.equalsIgnoreCase("author")) isAuthor = true;        else if (qName.equalsIgnoreCase("price")) isPrice = true;    }    @Override    public void characters(char ch[], int start, int length) throws SAXException {        String value = new String(ch, start, length).trim();        if (isTitle) {            System.out.print("书名: " + value + ", ");            isTitle = false;        } else if (isAuthor) {            System.out.print("作者: " + value + ", ");            isAuthor = false;        } else if (isPrice) {            System.out.println("价格: " + value);            isPrice = false;        }    }}

如何选择DOM还是SAX?

这是初学者常问的问题。这里有个简单对比:

特性 DOM SAX
内存占用 高(加载整个文档) 低(流式处理)
是否支持修改XML
适用场景 小型XML、需要频繁访问或修改 大型XML、只读操作

总结

通过本教程,你已经掌握了Java处理XML 的两种核心方法:DOM和SAX。无论你是要读取配置文件,还是对接Web服务,这些知识都能派上用场。记住,DOM解析XML 适合小文件和需要修改的场景,而SAX解析XML 更适合大文件和高性能要求的场合。

动手实践是掌握技能的关键!建议你创建一个 books.xml 文件,并运行上面的代码,观察输出结果。祝你在Java XML处理的道路上越走越远!