关闭

Sax解析详解

标签: Sax解析
78人阅读 评论(0) 收藏 举报
分类:
1.SAX:解析Simple API for XML
     SAX 是一个 event-driven serial-access 类 型的 XML 处理机制。
    event-driven : SAX 提供 面向 elements, text 和 comments 等 不同 事件的处理 方法,当解析器 读  取 XML 数据 时 就会 调 用 这 些方法。
    serial-access : SAX 工作起来有点像一个 连续 的 I/O 流,能 实时 的 传 送和接收数据,它不会去构造 XML 的 树 形 结 构,所以只需要很少的内存。
    当然 这 在另一方面 , 也 导 致了你不能退回到早前 读 取的一个 element 或者跳到后面 还 未 读 到的 element 。
  2. When To Use SAX
    因 为 SAX 是 处 理 XML 文件的最快的,内存需求最小的 解析器 ,所以当你只需要 简单 地 读取 数据, 好 让 你的程序运行 这 些数据的 时候 ,SAX 是很好的 选择 。
    因此, SAX 常被用于 servlet 和面向 网络 编程的存取 XML 文件。

  3.自定义 SAX 解析器
        以下是自定义一个SAX解析器的详细方法:
    1.继承DefaultHandler
        因为DefaultHandler同时实现了EntityResolver,DTDHandler,ContentHandler和ErrorHandler四个接口,
           这样你就可以在你的XML解析器中调用或重写这四个接口中定义的面向不同事件的处理方法。
    2.创建简单的parser(Validating parser)
         创建一个parser,并使用Schema或DTD对XML文件进行校验
    3.ContentHandler
          1)处理Document 事件的method
         - startDocument:  开始解析XML文件,此方法只会被调用一次
             - endDocument:  解析XML文件结束
          2)处理Element 事件的method
            - startElement:  开始解析XML文件的一个元素,在此方法中,可以获得该元素的属性和其对应的value值
            - endElement:  解析该元素完毕
          3)处理Character 事件的method
             - characters:  用于解析元素中的字符数据
          4)其他method
            - setDocumentLocator:  该方法只在解析开始前被调用一次。用户可获得当前所解析的XML文件的位置和public identifier等信息。
                - ignorableWhitespace:  使用DTD校验时,通过重写此方法,用户可以查看XML中哪些地方存在whitespace
                - processingInstruction:  通过此方法可以获得XML中定义的命令(target)和命令所处理的内容(data)

  4.ErrorHandler
        解析XML时发生的异常包括三种:a fatal error, an error, and a warning.
              -fatalError(SAXParseException):  用于处理致命error
            -error(SAXParseException):  用于处理非致命error,发生于对XML进行校验时。默认是被忽略的。由于当一个XML发生校验错误时,用户可能不希望再解析下去了,
          此时,可以将此类异常自定义为致命error抛出。
              -warning(SAXParseException):  用于处理警告。默认是被忽略的。用户可以通过自定义的方式打印出异常具体的发生地点和信息。
  5.DTDHandler
       事件处理method
             -notationDecl:  Receive notification of a notation declaration event.
            -unparsedEntityDecl:  Receive notification of an unparsed entity declaration event.
  6.EntityResolver
      事件处理method
              -resolveEntity:  该方法用于将public ID (URN)装换为system ID (URL),返回一个InputSource object。
  7.LexicalHandler
              SAX中使用org.xml.sax.ext.LexicalHandler来处理comments, CDATA sections和references。]
  8.方法参数代表类型
    startElement(String namespaceURI,String localName,String fullName,Attributes attributes){     }

        namespaceURI——命名空间

         localName——标签名称

        fullName——带命名空间的标签名

        Attributes——存放该标签的所有属性



        characters(char[ ] ch,int start ,int length)

        ch——当前读到的TextNode字节数组

        start——字节开始的位置,如果要读取全部,那就是从0开始

        length——当前TextNode的长度

附sax解析jar包:

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4222次
    • 积分:207
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类