`
sunli_qun
  • 浏览: 12867 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

java&xml第四天,sax

    博客分类:
  • java
阅读更多
SAX(Simple API for XML用于XML的简单API)
由于提前学习了cocoon,时间上又经过了一个周末,想要写得激情没有剩下多少,这里简单的回顾一下SAX的一些接口定义和用处吧!-_-#
1、准备工作
      sax相关的类都封装在org.xml.sax中,其中接口org.xml.sax.XMLReader是SAX2的核心类,你的xml解析器应该提供这个接口的实现类。比如"org.apache.xerces.parsers.SAXParser"这个类。
2、sax的处理流程
      sax基本的处理方法是在解析之前注册各种处理类(Handler),在解析的时候callback这些处理器,内容处理器就是其中最主要的一个。举例来说明的话,如下的xml文档:
<?xml version="1.0"?>
  
<samples>
    
<server>UNIX</server>
    
<monitor>color</monitor>
  
</samples>
他将会在解析的时候被转化成如下的一串事件流:
    Start document
    Start element (samples)
    Characters (white space)
    Start element (server)
    Characters (UNIX)
    End element (server)
    Characters (white space)
    Start element (monitor)
    Characters (color)
    End element (monitor)
    Characters (white space)
    End element (samples)
开发者要做的就是捕获这些事件,然后做自己要做的事情。
3、内容处理类
      org.xml.sax.ContentHandler
package org.xml.sax;
public interface ContentHandler
{
    
public void setDocumentLocator (Locator locator);
    
public void startDocument ()throws SAXException;
    
public void endDocument()throws SAXException;
    
public void startPrefixMapping (String prefix, String uri) throws SAXException;
    
public void endPrefixMapping (String prefix)throws SAXException;
       public void startElement (String namespaceURI, String localName,String qName, Attributes atts)
       throws SAXException;
    
public void endElement (String namespaceURI, String localName,String qName)throws SAXException;
    
public void characters (char ch[], int start, int length)throws SAXException;
    
public void ignorableWhitespace (char ch[], int start, int length)throws SAXException;
    
public void processingInstruction (String target, String data)throws SAXException;
    
public void skippedEntity (String name)throws SAXException;
}
有一点要说明的就是ignorableWhitespace 这个方法是在遇到可以忽略的空白的时候回调的,但是如果xml文档没有定义DTD或者是Schema,那么这个方法将不会被调用,因为如果没有文档结构的定义,解析器又如何判断哪些空白是可以忽略的呢。
4、错误处理类
      ErrorHandler这个类提供两个方法,warning和error,用于在处理解析过程发生的错误和警告,包括xml格式的错误和文档结构检查的错误。
5、过滤器和写入器
      org.xml.sax.XMLFilter这个接口扩展了XMLReader接口,添加了两个新方法:
      public void setParent(XMLReader reader);
      public XMLReader getParent();
      他的意图比较明显,将一个已有的XMLReader作为上级解析器,他将得以在这个XMLReader执行捕获sax事件之前捕获他们,并作一些操作,最后在链向XMLReader的对象,这里的概念很像cocoon的内部实现。
      这里还要提到的一个类是:org.xml.sax.helpers.XMLFilterImpl这个类实现了XMLFilter接口,不仅如此,他还提供了ContentHandler,ErrorHandler等处理器的处理方法通道。也就是说,如果继承XMLFilterImpl并覆盖startElement方法,那么你写得代码将在实际的Reader执行startElement方法被执行之前被执行。下面是一个注册Filter的例子:
XMLReader reader = XMLReaderFactory.createXMLreader();
MyFilter filter 
= new MyFilter(reader.);
filter.setContenHandler();

注意在注册内容处理类等类的时候,应该写filter....
另外,你当然也可以再写一个filter2,而把filter作为parent传入,这样就构成了一个事件处理链。

      org.xml.sax.XMLWriter是一个实际的过滤器,他也是通过上面说到的方式:扩展XMLFilterImpl来实现的。具体的类除了XMLWriter外还有DataWriter,他扩展XMLWriter。
      需要注意的是这两个类一般不用来做实际的写入流操作,但是他们可以用于很好的表现sax处理链的中间结果,也就是快照snapshot
6、sax的属性和特征
      属性和特征在XMLReader接口里面体现为:
      getFeature(String),setFeature(String,boolean)方法和getProperty(String),setProperty(String,Object)方法,用来控制解析过程的一些选项,比如是否进行DTD校验。比如:
      reader.setFeature("http://xml.org/sax/features/validation", true);这样会在解析的时候校验DTD定义
reader.setFeature("http://apache.org/xml/features/validation/schema", true);这样会启动schema校验。
分享到:
评论

相关推荐

    Java and XML, 3rd Edition

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    Java and XML(英文第三版)

    including full coverage of the SAX, DOM, StAX, JDOM, and dom4j APIs as well as the latest version of the Java API for XML Processing (JAXP) and Java Architecture for XML Binding (JAXB). The chapters ...

    JAVA与XML.rar

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    java读取xml文件的四种方法

    java读取xml文件的四种方法: 第一种 DOM 实现方法 第二种 DOM4J实现方法 第三种 JDOM实现方法 第四种SAX实现方法

    java解析xml及4种常用解析比较

    SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第4章 xsl转换 101 4.1 xslt概述 101 4.2 xalan处理器 105 4.3 模板规则 106 4.4 [xsl:apply-templates]元素 107 4.5 [xsl:value-of]元素 108 4.6 [xsl:for-each]元素 110 4.7 匹配节点的模式 111 4.8 mode...

    xml高级编程(完整版).part1

    第4 章数据建模与XML 第5 章文档对象模型 第6 章SAX 1.0 :XML 简易API 第7 章命名空间和模式 第8 章链接和查询 第9 章转换XML 第10 章XML 和数据库 第11 章服务器到服务器 第12 章电子商务和XML ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第4章 xsl转换 101 4.1 xslt概述 101 4.2 xalan处理器 105 4.3 模板规则 106 4.4 [xsl:apply-templates]元素 107 4.5 [xsl:value-of]元素 108 4.6 [xsl:for-each]元素 110 4.7 匹配节点的模式 111 4.8 mode...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    全书一共被压缩为5个rar,这是第四个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    SAX解析XML

    注意:由于有些环境不一样,有时候第二个参数有可能为空,所以可以使用第三个参数,因此在解析前,先调用一下看哪个参数能用,第4个参数是这个节点的属性。这里我们不需要这个节点,所以从这个节点开始,也就是图中1...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    第4章 xsl转换 101 4.1 xslt概述 101 4.2 xalan处理器 105 4.3 模板规则 106 4.4 [xsl:apply-templates]元素 107 4.5 [xsl:value-of]元素 108 4.6 [xsl:for-each]元素 110 4.7 匹配节点的模式 111 4.8 mode...

    疯狂XML讲义 源码

    第四部分介绍了Web Services和CXF,其中CXF是Java领域的主流Web Services框架,简单易用。第五部分则提供了两个综合性案例:基于XML的电子公告系统和电子拍卖系统,让读者将前面所学应用到实际项目中。尤其是电子...

    疯狂xml讲义

    第四部分介绍了Web Services和CXF,其中CXF是Java领域的主流Web Services框架,简单易用。第五部分则提供了两个综合性案例:基于XML的电子公告系统和电子拍卖系统,让读者将前面所学应用到实际项目中。尤其是电子...

    疯狂XML讲义

    第四部分介绍了Web Services和CXF,其中CXF是Java领域的主流Web Services框架,简单易用。第五部分则提供了两个综合性案例:基于XML的电子公告系统和电子拍卖系统,让读者将前面所学应用到实际项目中。尤其是电子...

    疯狂XML讲义.part3.rar

    第四部分介绍了Web Services和CXF,其中CXF是Java领域的主流Web Services框架,简单易用。第五部分则提供了两个综合性案例:基于XML的电子公告系统和电子拍卖系统,让读者将前面所学应用到实际项目中。尤其是电子...

    疯狂XML讲义(Web Service).pdf

    第四部分介绍了Web Services和CXF,其中CXF是Java领域的主流Web Services框架,简单易用。第五部分则提供了两个综合性案例:基于XML的电子公告系统和电子拍卖系统,让读者将前面所学应用到实际项目中。尤其是电子...

    XML必知必会:Java、C#、Python多种语言解析XML文档

    第4章 文档类型定义 有效的文档、编写DTD、DTD元素定义、DTD属性定义 第5章 XML Schema 什么是Schema?、Schema与DTD比较、Schema文档结构、Schema数据类型、元素数量、Schema属性定义 第6章 XPath技术 什么是...

Global site tag (gtag.js) - Google Analytics