`
sunli_qun
  • 浏览: 13587 次
  • 性别: 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&xml

    第四章着重于如何使用DTD(Document Type Definition)和XML Schema来约束XML文档,确保它们符合预定的结构和语义规范。DTD是一种较老的规范,主要用于描述文档的基本结构;而XML Schema则提供了一种更为强大和复杂...

    java and xml 3rd edition

    《Java与XML第三版》是一本深入探讨Java与XML集成技术的专业书籍,旨在帮助开发者理解和应用这两种技术在软件开发中的协同工作。XML(Extensible Markup Language)作为一种数据交换和存储的标准,广泛应用于分布式...

    Java and XML(英文第三版)_java_xml_birdsolc_源码

    《Java and XML(英文第三版)_java_xml_birdsolc_源码》是关于Java与XML集成编程的一本权威指南,特别适合于那些希望深入理解如何在Java应用程序中有效地使用XML技术的开发者。这本书详细阐述了Java平台上的XML处理...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    除了Java自带的解析库,还有第三方库如JAXB(Java Architecture for XML Binding)用于对象与XML之间的映射,以及DOM4J、XOM等提供更高级别的接口,简化XML处理。 5. 实战应用: 在实际项目中,根据需求选择合适的...

    Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath

    ### Java解析XML技术详解:DOM、SAX、JDOM、DOM4j与XPath #### 一、基础知识概览 在Java开发中,处理XML文件是一项常见的任务。XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标准...

    Java & XML

    - **第4章:高级SAX**:进一步探讨了SAX中的属性、特征、过滤器和更复杂的处理器等内容。 - **第5章:DOM**:深入讲解了Document Object Model (DOM) 的概念及其序列化、可变性等特性。 - **第6章:高级DOM**:涵盖...

    Java and XML, 3rd Edition

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

    java_xml_api,java操作XML文档

    虽然Java自带的XML API已经很强大,但还有许多第三方库如DOM4J和JDOM提供了更高级的功能和更好的性能,开发者可以根据实际需求选择使用。 总结起来,Java XML API提供了全面的XML处理能力,涵盖了从解析到操作再到...

    java-xml相互转化

    在Java中,我们可以使用JAXB(Java Architecture for XML Binding)或者第三方库如Apache的XMLBeans、JDOM、DOM4J等实现对象到XML的转化。JAXB是Java平台的标准部分,它提供了一种自动将Java类绑定到XML Schema并...

    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 and xml 3rd edition 3

    《Java与XML开发详解》第三版是一本深入探讨如何在Java平台上使用XML技术的专业书籍。这一版的内容可能涵盖了自上一版以来XML和Java技术的最新发展和改进,旨在帮助开发者充分利用两者之间的协同作用,提高应用程序...

    java操作xml相关jar

    7. **DOM4J** 和 **JDOM**:这两个是Java社区开发的第三方XML库,提供了比Java标准库更友好的API。它们支持DOM、SAX和StAX,并且提供了额外的功能,如XPath查询和XML编写。 8. **Woodstox** 和 **Aalto-XML**:这两...

    java读取xml用到的jar包集合

    DOM4J是另一个流行的Java XML库,它提供了灵活且高性能的API,支持DOM、SAX和StAX。DOM4J也支持XPath和XML Schema,适合处理复杂的XML操作。 7. **Xerces** Xerces是Apache软件基金会开发的一个开源XML解析器,它...

    java读取XMl数据

    Java语言在处理XML数据时提供了丰富的API,这些API主要集中在`javax.xml`和`org.w3c.dom`等包中。XML(eXtensible Markup Language)是一种结构化数据存储格式,广泛应用于配置文件、数据交换和Web服务等领域。本文...

    JAVA与XML.rar

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

    java dom sax XML入门教程

    Java作为一款强大的编程语言,提供了多种处理XML的API,其中包括DOM(Document Object Model)和SAX(Simple API for XML)。本教程将帮助初学者深入理解这两种解析XML的方法。 1. DOM解析器 DOM解析器将整个XML...

    java 操作xml文件(包含xml文件和对应jar包)

    总结来说,Java操作XML文件涉及多种API和库,如DOM、SAX、StAX以及第三方库JDOM、DOM4J等。理解这些工具的工作原理和使用方法是Java开发中的重要技能,压缩包中的项目和jar包提供了一个实际操作的环境,有助于加深...

    java读取xml文件

    总的来说,Java提供了多种方式处理XML文件,从简单的DOM和SAX解析到强大的第三方库。根据项目需求和性能考虑,选择合适的解析方法和工具至关重要。通过熟练掌握这些技术,开发者可以更好地处理XML数据,提升工作效率...

    Java读取xml文件的四种方法.doc

    第四种方法:使用 SAX SAX(Simple API for XML)是一种基于事件驱动的 XML 解析器,它提供了一个高效、灵活的方式来处理 XML 文档。使用 SAX 可以将 XML 文档解析成一个事件流,然后通过处理这些事件来访问 XML ...

Global site tag (gtag.js) - Google Analytics