XML SAX简单应用程序编程接口.ppt_第1页
XML SAX简单应用程序编程接口.ppt_第2页
XML SAX简单应用程序编程接口.ppt_第3页
XML SAX简单应用程序编程接口.ppt_第4页
XML SAX简单应用程序编程接口.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SAX简单应用程序编程接口,主要内容,SAX解析方式与过程 SAX接口的实现机制 SAX编程接口的Java实现,SAX (Simple API for XML),它的接口风格完全不同于DOM 接口采用了基于事件的方式来处理XML 文档. SAX 这个接口规范是XML 分析器和XML 处理器提供的较XML 更底层的接口从本质上说SAX 是一种Java 接口它能给应用程序提供较大的灵活性 SAX 提供了AttributeList DocumentHandler DTDHandler EntityResolver ErrorHandler Locator Parser 等七个接口以及HandlerB

2、ase InputSource SAXException和SAXParseException 等四个类,Sax的特点,优点: SAX 可以解析任意大小的文件 适合于只处理某些特定数据的场合 简单快速 缺点: 不能对文档作随机的存取 目前还没有主流浏览器支持SAX,DocumentHandler 接口,最常用的五个方法startDocument,endDocument startElement endElement 以及characters. StartDocument() 表示文档开始 EndDocument() 表示文档结束 startElement(String name, Attribu

3、teList attrs) 表示元素开始当一对标记中的起始标记中的所有内容被处理后解析器激发,此事件包括了标记名和其属性标记名就作为一个字符串变量传递给startElement 方法起始标记所代表的元素的所有属性都以AttributeList 的形式传递给startElement 方法 endElement(String name) 表示元素结束标记名就作为一个字符串变量传递给endElement 方法 characters(char ch,int start, int length) 包含字符数据类似于DOM 的一个Text节点在一个元素内的字符以一个字符数组的形式传递给characters

4、 方法 characters 方法还有另外两个参数其中start 代表元素内的第一个字符在字符数组中的偏移另一个参数length 代表了字符数组的长度也即字符的个数,startDocument() startElement(“guests”) startElement(“guest”) startElement(“name”) characters(“yuxiang weng”) endElement(“name”) startElement(“ageagrade”) characters(“a”) endElement(“ageagrade”) startElement(“money”) c

5、haracters(“1832.3”) endElement(“money”) endElement(“guest”) endElement(“guests”) endDocument(),例子, yuxiang weng a 1832.3 ,Sax接口的解析方式更接近于自然方式,AttributeList 接口,一般而言可以使用如下的两种方法从AttributeList 中获取信息 对整个列表作循环操作 对特定属性值或类型的操作 AttributeList 接口是出现在特定的起始标记中的一组属性SAX 解析器实现了这个接口,并将接口实例作为每个startElement 事件的第二个参数传递给

6、SAX 应用程序只有在startElement 的调用范围内解析器提供的实例才能返回有效的结果,public void startElement (String name,AttributeList atts) for (int i=0;iatts.getLength();i+) String name=atts.getName(i); String type=atts.getType(i); String value=atts.getValue(i); .其他操作 ,public void startElement (String name,AttributeList atts) Strin

7、g id=atts.getValue(“id”); String publishier=atts.getValue(“publisher”); 其他操作 ,AttributeList 接口方法,EntityResolver 接口,EntityResolver 接口用于识别实体当XML 文档包含外部实体引用时解析器通常会自动分析URL 定位并解析相关的文件 对于一些使用特殊的输入源构建XML 文档的应用程序和使用URI 系统标志符代替URL 的应用程序而言这个接口是非常有用,例子,EntityResolver 接口是如何识别一个URI 为 Import org.xml.sax.EntityRes

8、olver; Import org.xml.sax.InputSource; Public class TheResolver implements EntityResolver public InputSource resolveEntity(String publicId,string systemId) if (systemId.equals(“ TheReader reader=new TheReader(); Return new InputSource(reader); 返回一个InputSource对象 else return null; ,统计一个商店的月平均营业额, ,从mo

9、ney.xml文件中,读取相关数据。用JAXP解析器解析,如何加载解析器和xml文件,SAXParserFactory factory = SAXParserFactory.newInstance(); 创建了一个SAXParserFactory的实例factory try out = new OutputStreamWriter (System.out, UTF8); 建立输出流 SAXParser saxParser = factory.newSAXParser(); 由这个类工厂创建了一个分析器实例 saxParser.parse( new File(argv 0), new searc

10、h() ); 通过该分析器实例处理分析事件 catch (Throwable t) t.printStackTrace (); ,首先引入所需的类包 import java.io.*; import org.xml.sax.*; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser;,计算方法,在month元素开始的时候就将变量count加1 并且将price属性值累加到变量total

11、Price中那么到了最后一个元素就可以计算出该年度的总的营业额 最后在文档结束的时候计算并输出月平均营业额,startElement,public void startElement (String name, AttributeList attrs) throws SAXException if(name.equals(month) count=count+1; 月数累加 double price = new Double (attrs.getValue(price).doubleValue() ; 把字符串转换为double类型 totalPrice+=price; 总的营业额相加 ,en

12、dDocument,public void endDocument() averagePrice=totalPrice/count; 月平均营业额 System.out.println(the avarage money ervry month is +averagePrice); ,Java编程环境的使用,Jdk1.5+jcreate破解 jcreator(1)参考下载地址: 安装 解包后, 运行Setup.过程较为简单,不明白的话尽可能用默认值. 设置关联文件如右,设置JDK的主目录(如果JDK先于JCreator安装,安装程序会自动找到。因此可直接按Next继续下一步)。,运行,创建工程: 选择菜单 File-New-Project. 打开以下窗体,设置工程及相关文件路径,设置工程相关类的路径,设置(调试)工程工具(Project Tools) 默认情况是Compiler,其余还有Run App

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论