Java解析XML的常用几种方法二 SAX的方式

import java.io.InputStream;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SaxDemo implements XmlDocument { public SaxDemo() {} Override public...
Java解析XML的常用几种方法二 SAX的方式
SAX是一种事件驱动的解析方式。当解析器发现元素开始、元素结束、文本、文档的开始或结束等事件时,会触发相应的事件处理程序。程序员需要编写代码来响应这些事件,以便处理和保存数据。这种方式的优点在于,它不需要一次性加载整个文档,因此占用的资源较少,特别适合Applet或内存资源有限的环境。此外,SAX解析器的代码量通常比DOM解析器更少,这使得它在Applet中下载和运行更加高效。

然而,SAX也有其缺点。首先,它不是持久的,即事件过后,如果没有保存数据,那么数据将丢失。其次,SAX是无状态的,无法保存解析过程中的状态信息。此外,通过事件只能获取到文本内容,但无法直接知道该文本属于哪个元素。因此,如果需要获取元素层次结构或属性信息,SAX可能不是最佳选择。

SAX最适合用于处理大型XML文档或仅需访问文档的部分内容的场景。例如,当仅需要处理某个特定元素的内容时,SAX可以避免加载整个文档,从而节省资源。在Applet或内存资源受限的环境中,SAX的轻量级特性使其成为理想的选择。

下面是一个简单的SAX解析器示例代码,用于解析XML文件:

package com.davidw.xml.sax;

import java.io.FileInputStream;

import java.io.InputStream;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class SaxDemo implements XmlDocument {

public SaxDemo() {}

@Override

public void createXML(String fileName) { }

@Override

public void parseXML(String fileName) {

SAXParserFactory saxpf = SAXParserFactory.newInstance();

try {

SAXParser parser = saxpf.newSAXParser();

InputStream is = new FileInputStream(fileName);

parser.parse(is, new MySAXHandler());

} catch (Exception e) {

e.printStackTrace();

}

}

}

class MySAXHandler extends DefaultHandler {

boolean hasAttr = false;

Attributes attributes = null;

public void startDocument() throws SAXException {

System.out.println("文档开始打印!");

}

public void endDocument() throws SAXException {

System.out.println("文档解析结束!");

}

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

if (qName.equals("employees")) { return; }

if (qName.equals("employee")) {

System.out.println(qName);

}

if (attributes.getLength() > 0) {

this.attributes = attributes;

this.hasAttr = true;

}

}

public void endElement(String uri, String localName, String qName) throws SAXException {

if (hasAttr && (attributes != null)) {

for (int i = 0; i < attributes.getLength(); i++) {

System.out.println("属性名称: " + attributes.getQName(i) + ",属性值: " + attributes.getValue(i));

}

}

}

}

此代码定义了一个名为SaxDemo的类,它实现了XmlDocument接口。parseXML方法使用SAXParserFactory和SAXParser来解析指定的XML文件,并使用自定义的MySAXHandler处理解析事件。MySAXHandler类继承自DefaultHandler,并重写了startElement和endElement方法来处理元素开始和结束事件。2024-12-01
mengvlog 阅读 58 次 更新于 2025-10-30 10:16:27 我来答关注问题0
  • 在Java环境中处理XML文件主要有四种方法:DOM(Document Object Model)、SAX(Simple API for XML)、JDOM以及JAXB(Java Architecture for XML Binding)。DOM是一种由W3C提供的方法,它将整个XML文件加载到内存中,并构建一棵数据树,以便快速访问各个节点。这种方法对系统性能要求较高,适合较小的XML文...

  • (1)、dom解析 dom解析是html和xml的应用程序接口(api) 以层次结构(类似与树形)来组织节点 和信息片段 映射xml文档的结构 允许获取和操作文档的任意部分 是官方标准 (2)、sax解析 流模型中in个的 推 模型 分析方式 通过事件驱动 没发现一个节点就引发一个事件 事件推给事件处理期 遍历回调方法 (3)...

  • 广东优就业 java 解析xml有哪几种方式

    DOM4J生成和解析XML文档。dom4j是目前在xml解析方面是最优秀的(Hibernate、Sun的JAXM也都使用dom4j来解析XML),它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理 JDOM生成和解析XML 。 JDOM与DOM非常类似,它是处理XML的纯JAVA A...

  • 绝世IT云军团 Java解析XML的几种方法

    Element:元素,可用于获取属性参数 SAX(Simple API for XML)解析 【DefaultHandler类】SAX事件处理程序的默认基类,实现了DTDHandler、ErrorHandler、ContextHandler和EntityResolver接口,通常做法是,继承该基类,重写需要的方法,如startDocument()【创建SAX解析器】SAXParserFactory saxf = SAXParserFactory.new...

  •  文暄生活科普 解析XML格式数据

    解析XML格式数据主要涉及到将XML文档转换为程序可以处理的数据结构,这通常通过使用特定的解析技术来实现。在Java中,解析XML数据主要有四种方法,分别是DOM(Document Object Model)、SAX(Simple API for XML Parsing)、XML Pull解析以及JDOM和Dom4J。以下是每种方法的详细解析:1. DOM解析 概述:DOM是...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部