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 阅读 10 次 更新于 2025-06-20 00:32:34 我来答关注问题0
  • 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.n...

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

  • 在Java环境中处理XML文件主要有四种方法:DOM(Document Object Model)、SAX(Simple API for XML)、JDOM以及JAXB(Java Architecture for XML Binding)。DOM是一种由W3C提供的方法,它将整个XML文件加载到内存中,并构建一棵数据树,以便快速访问各个节点。这种方法对系统性能要求较高,适合较小的XML文...

  •  阿暄生活 解析xml不用第三方库 解析xml的第三方库

    在Java中,可以使用javax.xml.parsers包下的类来解析XML,这些类属于Java标准库的一部分。DOM解析:使用DocumentBuilder和DocumentBuilderFactory来构建DOM树,然后遍历DOM树以读取XML数据。SAX解析:使用SAXParser和SAXParserFactory来创建SAX解析器,通过实现ContentHandler接口来处理解析事件。StAX解析(Java 6及以...

  •  深空游戏 怎样用java从xml里读取数据并且保存为txt格式

    在Java中,读取XML文件并将其数据保存为TXT文本,可以通过使用SAX或DOM解析器来实现。下面以SAX解析器为例,展示具体步骤。首先,需要导入相应的XML解析库。在你的项目中添加javax.xml.parsers和org.xml.sax库。接着,创建一个SAXParserFactory实例,然后使用newSAXParser方法创建一个SAXParser对象。然后,...

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

Java相关话题

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