xml总结四

SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与
DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据
的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激
活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的
访问,因而SAX接口也被称作事件驱动接口。
SAX分析器在对XML文档进行分析时,触发了一系列的事件,由于事件触
发本身是有时序性的,因此,SAX提供的是一种顺序访问机制,对于已经分
析过的部分,不能再倒回去重新处理。SAX之所以被叫做"简单"应用程序接
口,是因为SAX分析器只做了一些简单的工作,大部分工作还要由应用程序
自己去做。也就是说,SAX分析器在实现时,它只是顺序地检查XML文档中的
字节流,判断当前字节是XML语法中的哪一部分、是否符合XML语法,然后再
触发相应的事件,而事件处理函数本身则要由应用程序自己来实现。同DOM
分析器相比,SAX分析器缺乏灵活性。然而,由于SAX分析器实现简单,对内
存要求比较低,因此实现效率比较高,对于那些只需要访问XML文档中的数
据而不对文档进行更改的应用程序来说,SAX分析器更为合适。
SAX
图中最上方的SAXParserFactory用来生成一个分析器实例。XML文档是
从左侧箭头所示处读入,当分析器对文档进行分析时,就会触发在
DocumentHandler,ErrorHandler,DTDHandler以及
EntityResolver接口中定义的回调方法。
SAX分析器的大体构成框架
• XML解析器实际上就是一段代码,它读
入一个XML文档并分析其结构。
• 分类:
– 带校验的解析器
– 不校验的解析器(效率高)
– 支持DOM的解析器(W3C的官方标准 )
– 支持SAX的解析器(事实上的工业标准 )
应用程序
解析器
XML文档
• SAX是事件驱动的,文档的读入过程就是SAX
的解析过程。
• 在读入的过程中,遇到不同的项目,解析器会
调用不同的处理方法。
SAX解析器  XML文档
事件处理器1
事件处理器2
事件处理器3
事件处理器4
事件处理器5
项目  处理方法
文档开始  startDocument()
<PEOPLE>  startElement()
“Tony Blair”  characters()
</PEOPLE>  endElement()
文档结束  endDocument()
org.xml.sax.helpers.DefaultHandler
类的方法
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class sax extends DefaultHandler {
Stack tags=new Stack();
public void endDocument() throws SAXException { System.out.println("------Parse End--------"); }
public void startDocument() throws SAXException { System.out.println("------Parse Begin--------"); }
public void startElement(String p0, String p1, String p2, Attributes p3) throws
SAXException {
tags.push(p2);
}
public void endElement(String p0, String p1, String p2) throws SAXException {
tags.pop();
if (p2.equals("PERSON")) printout();
}
public void characters(char[] p0, int p1, int p2) throws SAXException {
String tag=(String) tags.peek();
if (tag.equals("NAME")) name=new String(p0,p1,p2);
else if (tag.equals("ADDRESS")) address=new String(p0,p1,p2);
……
}
static public void main(String[] args) {
String filename = "candidate.xml";
SAXParserFactory spf =
SAXParserFactory.newInstance();
SAXParser saxParser=null;
try {
saxParser = spf.newSAXParser();
saxParser.parse(new File(filename),new
sax());
} catch (Exception e) {
System.out.println(e);
System.exit(1);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值