Java如何解析 XML 文档
极客逐梦行
2024-04-02 17:21
这篇文章将为大家详细讲解有关Java如何解析 XML 文档,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Java 解析 XML 文档
引入
XML(可扩展标记语言)是一种用于存储和传输分层数据的标记语言。在 Java 中,解析 XML 文档涉及使用 XML 解析器库将 XML 文档转换为 Java 对象。本文将详细介绍 Java 中解析 XML 文档的两种主要方法:DOM 解析和 SAX 解析。
DOM 解析
DOM(文档对象模型)是一种内存表示,它将整个 XML 文档加载到内存中,并创建一棵表示文档结构的树。使用 DOM 解析器,可以访问和操作文档中的每个元素、属性和文本节点。
DOM 解析步骤:
- 创建一个
DocumentBuilderFactory
实例。 - 调用
newDocumentBuilder()
方法来创建DocumentBuilder
实例。 - 使用
DocumentBuilder
的parse()
方法加载 XML 文档并创建Document
对象。 - 使用
Document
对象遍历 XML 文档并检索所需信息。
示例代码:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
public class DOMParserExample {
public static void main(String[] args) {
try {
// 创建 DocumentBuilderFactory 实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 创建 DocumentBuilder 实例
DocumentBuilder builder = factory.newDocumentBuilder();
// 加载 XML 文档并创建 Document 对象
Document doc = builder.parse("my.xml");
// 获取根元素
Element root = doc.getDocumentElement();
// 获取所有子元素
NodeList children = root.getChildNodes();
// 遍历子元素并打印元素名称
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child instanceof Element) {
System.out.println(child.getNodeName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
SAX 解析
SAX(简单 API for XML)是一种事件驱动的解析器,它按顺序处理 XML 文档的事件(例如开始元素、结束元素和字符数据)。SAX 解析器比 DOM 解析器更快,因为它们不会将整个文档加载到内存中。
SAX 解析步骤:
- 创建一个
SAXParserFactory
实例。 - 调用
newSAXParser()
方法来创建SAXParser
实例。 - 注册一个
ContentHandler
来处理 XML 事件。 - 使用
SAXParser
的parse()
方法解析 XML 文档。
示例代码:
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXParserExample {
public static void main(String[] args) {
try {
// 创建 SAXParserFactory 实例
SAXParserFactory factory = SAXParserFactory.newInstance();
// 创建 SAXParser 实例
SAXParser parser = factory.newSAXParser();
// 注册 ContentHandler
DefaultHandler handler = new DefaultHandler() {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("开始元素: " + qName);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("结束元素: " + qName);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.println("字符数据: " + new String(ch, start, length));
}
};
// 解析 XML 文档
parser.parse("my.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
比较:DOM 与 SAX
特性 | DOM | SAX |
---|---|---|
内存消耗 | 高 | 低 |
速度 | 慢 | 快 |
适用性 | 适用于需要随机访问文档各个部分的情况 | 适用于需要按顺序处理文档的情况 |
以上就是Java如何解析 XML 文档的详细内容,更多请关注编程学习网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341