`
诗意的栖居
  • 浏览: 269634 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

SAX解析XML

阅读更多
SAX在概念上与DOM完全不同。它不同于DOM的文档驱动,它是事件驱动的,它并不需要读入整个文档,而文档的读入过程也就是SAX的解析过程。所谓事件驱动,是指一种基于回调(callback)机制的程序运行方法。
输入XML文件到XMLReader-->XMLReader(parse())解析-->ContentHandler(相当事件监听器,定义了好多方法,常用的startDocument(),endDocument(),startElement(),endElement(),characters())。这些方法被覆盖,方法体自定义。
在XMLReader parse()过程中生成相应事件,以触发ContentHandler中相应的方法。本代码只是最简单的例子,自己想得到什么结果可以在事件中编不同的代码控制。

SAX可以继承的类有四个,但实际上只要继承一个DefaultHandler可以了
想写一个类Update继承DefaultHandler
//创建SAXParser的实例
SAXParser parser = (SAXParser) Class.forName("org.apache.xerces.parsers.SAXParser").newInstance();
//允许应用程序注册内容事件处理程序。
parser.setContentHandler(Update);
//解析 XML。
parser.parse(文件名);
当SAX读到文件开始时,触发事件,执行startDocument()方法,读到标签触发startElement()方法,下面执行characters()或endElement()方法视情况而定,最后读完执行endDocument()方法
方法定义如下:

  public void startDocument() throws SAXException {
       System.out.println("文件开始");
    }

  public void startElement(String uri, String name, String qName,
            Attributes atts) throws SAXException {
       System.out.println("标签开始");
   }

   public void characters(char[] ch, int start, int length)
            throws SAXException {
       System.out.println("处理字符"); 
   }
   
   public void endDocument() throws SAXException {
       System.out.println("文档结束");
   }

    public void endElement(String uri, String name, String qName)
            throws SAXException {
        System.out.println("标签结束");
    }

参数:qName:标签的标签名
Attribute接口中的getLocalName()和getValue()方法可以得到标签和值
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics