在现代软件开发中,Java XML解析 是一项非常实用的技能。无论是读取配置文件、处理Web服务返回的数据,还是与其他系统交换信息,XML(可扩展标记语言)都扮演着重要角色。本教程将带你从零开始,用通俗易懂的方式学习如何在Java中处理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的方式,最常用的有以下两种:
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
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 |
|---|---|---|
| 内存占用 | 高(加载整个文档) | 低(流式处理) |
| 是否支持修改XML | 是 | 否 |
| 适用场景 | 小型XML、需要频繁访问或修改 | 大型XML、只读操作 |
通过本教程,你已经掌握了Java处理XML 的两种核心方法:DOM和SAX。无论你是要读取配置文件,还是对接Web服务,这些知识都能派上用场。记住,DOM解析XML 适合小文件和需要修改的场景,而SAX解析XML 更适合大文件和高性能要求的场合。
动手实践是掌握技能的关键!建议你创建一个 books.xml 文件,并运行上面的代码,观察输出结果。祝你在Java XML处理的道路上越走越远!
本文由主机测评网于2025-12-03发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122262.html