2011年计算机二级JAVA知识点:Java与XML联合编程之SAX篇
来源:不详
加入收藏 0评论
2011/12/9 17:25:15

学历提升报名! 咨询微信:17787865775  培训咨询:13312524700

2021年云南成人高考大专-本科报名简章

【云南开放大学报名】【职业技能证】【教师证】

 

3.7 Java与XML联合编程之SAX篇

  SAX概念

  SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,可以说是“民间”的事实标准。实际上,它是一种社区性质的讨论产物。虽然如此,在XML中对SAX的应用丝毫不比DOM少,几乎所有的XML解析器都会支持它。

  与DOM比较而言,SAX是一种轻量型的方法。我们知道,在处理DOM的时候,我们需要读入整个的XML文档,然后在内存中创建DOM树,生成DOM树上的每个Node对象。当文档比较小的时候,这不会造成什么问题,但是一旦文档大起来,处理DOM就会变得相当费时费力。特别是其对于内存的需求,也将是成倍的增长,以至于在某些应用中使用DOM是一件很不划算的事(比如在applet中)。这时候,一个较好的替代解决方法就是SAX。

  SAX在概念上与DOM完全不同。首先,不同于DOM的文档驱动,它是事件驱动的,也就是说,它并不需要读入整个文档,而文档的读入过程也就是SAX的解析过程。所谓事件驱动,是指一种基于回调(callback)机制的程序运行方法。(如果你对Java新的代理事件模型比较清楚的话,就会很容易理解这种机制了)

  在XMLReader接受XML文档,在读入XML文档的过程中就进行解析,也就是说读入文档的过程和解析的过程是同时进行的,这和DOM区别很大。解析开始之前,需要向XMLReader注册一个ContentHandler,也就是相当于一个事件监听器,在ContentHandler中定义了很多方法,比如startDocument(),它定制了当在解析过程中,遇到文档开始时应该处理的事情。当XMLReader读到合适的内容,就会抛出相应的事件,并把这个事件的处理权代理给ContentHandler,调用其相应的方法进行响应。

  这样泛泛的说来或许有些不容易理解,别急,后面的例子会让你明白SAX的解析过程。看看这个简单XML文件:

  Ogden Nash

  Adam

  当XMLReader读到标签时,就会调用ContentHandler.startElement()方法,并把标签名POEM作为参数传递过去。在你实现的startElement()方法中需要做相应的动作,以处理当出现时应该做的事情。各个事件随着解析的过程(也就是文档读入的过程)一个个顺序的被抛出,相应的方法也会被顺序的调用,最后,当解析完成,方法都被调用后,对文档的处理也就完成了。下面的这个表,列出了在解析上面的那个XML文件的时候,顺序被调用的方法:

  遇到的项目 方法回调

  {文档开始} startDocument()

  startElement(null,"POEM",null,{Attributes})

  "\n" characters("\n...", 6, 1)

  startElement(null,"AUTHOR",null,{Attributes})

  "Ogden Nash" characters("\n...", 15, 10)

  endElement(null,"AUTHOR",null)

  "\n" characters("\n...", 34, 1)

  endElement(null,"TITLE",null)

  "\n" characters("\n...", 55, 1)

  startElement(null,"LINE",null,{Attributes})

  "Adam" characters("\n...", 62, 4)

  endElement(null,"LINE",null)

  "\n" characters("\n...", 67, 1)

  endElement(null,"POEM",null)

  {文档结束} endDocument()

 

 

—————————————————————————
温馨提示:因考试政策、内容不断变化与调整,学课在线网提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!
>>长期招聘兼职招生代理,有意请联系我们;团报优惠、项目合作咨询:13312524700(微信)


课程名称
课程试听
课程名称
课程试听
初级会计师

一级建造师

中级会计师

二级建造师

注册会计师

一级造价工程师

经济师考试

监理工程师

银行从业

安全工程师

基金从业

消防工程师

人力资源师

法律职业资格
社会工作者
消防设施操作员

教师资格证
成人高考
执业药师

自考辅导课

护士资格证

考研辅导课

心理咨询师

公共营养师




热点推荐
  • Java的泛型讲解
    2012-05-31 31
  • java中xml解析器的应用实例
    2012-03-22 35
网友评论
热门评论