使用jaxp对比xml进行SAX解析

package cn.itcast.sax;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class Demo1 {

    /**
     *sax方式解析book1.xml文件
     * @throws SAXException
     * @throws ParserConfigurationException
     * @throws IOException
     */
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

        //1.创建工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();

        //2.用工厂创建解析器
        SAXParser sp = factory.newSAXParser();

        //3.利用解析器得到reader
        XMLReader reader = sp.getXMLReader();

        //4、在解析xml文档之前,设置好事件处理器
        reader.setContentHandler(new MyContentHandler2());

        //4.利用reader读取 xml文档
        reader.parse("src/book1.xml");
    }
}
//用于获取第一个售价节点的值:<售价>109</售价>
class MyContentHandler2 extends DefaultHandler{

    private boolean isOk = false;
    private int index = 1;
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if(isOk==true && index==1){
            System.out.println(new String(ch,start,length));
        }
    }

    @Override
    public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
        if(name.equals("售价")){
            isOk = true;
        }
    }

    @Override
    public void endElement(String uri, String localName, String name)
            throws SAXException {
        if(name.equals("售价")){
            isOk = false;
            index++;
        }
    }

}

//得到xml文档内容的事件处理器
class MyContentHandler implements ContentHandler{

    public void startElement(String uri, String localName, String name,
            Attributes atts) throws SAXException {

        System.out.println("当前解析到了:" + name + ",这个标签是开始标签");
        for(int i=0;i<atts.getLength();i++){
            String attname = atts.getQName(i);
            String attvalue = atts.getValue(i);

            System.out.println(attname + "=" + attvalue);
        }

    }

    public void endElement(String uri, String localName, String name)
    throws SAXException {

        System.out.println("当前解析到了:" + name + ",这个标签是结束标签");

    }

    public void characters(char[] ch, int start, int length)
            throws SAXException {

        System.out.println("当前解析到了内容:" + new String(ch,start,length));
    }

    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub

    }

    public void endPrefixMapping(String prefix) throws SAXException {
        // TODO Auto-generated method stub

    }

    public void ignorableWhitespace(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub

    }

    public void processingInstruction(String target, String data)
            throws SAXException {
        // TODO Auto-generated method stub

    }

    public void setDocumentLocator(Locator locator) {
        // TODO Auto-generated method stub

    }

    public void skippedEntity(String name) throws SAXException {
        // TODO Auto-generated method stub

    }

    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub

    }

    public void startPrefixMapping(String prefix, String uri)
            throws SAXException {
        // TODO Auto-generated method stub

    }

}
时间: 2024-09-30 23:52:13

使用jaxp对比xml进行SAX解析的相关文章

使用jaxp对比xml进行DOM解析

/*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigu

XML的sax解析

1)两种解析方式 dom解析:一次性把整个xml文件读入内容,构建document树. 问题:比较消耗内存     不适合读取大文件 sax解析: 为了解决读取大文件的问题,引入sax解析 原理:读取一点(xml的某个部分),解析一点 sax,simple api for xml 2) sax的api 官方jaxp的sax .  org.xm.sax.* 2.1 读取xml文件 a)创建SAXParserFactory对象 b)获取一个SAXParser对象 c)获取一个XMLReader对象

iOS中的数据解析(XML,JSON),SAX解析,DOM解析

第三方 SAT解析 #import "SAXTableViewController.h" #import "Student.h" @interface SAXTableViewController ()<NSXMLParserDelegate> @property (nonatomic, retain) NSMutableArray *dataSourse; // 存储学生对象 @property (nonatomic, retain) Student

Android解析XML之SAX解析器

SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能够根据提供的事件信息来决定自己的行为. SAX解析器的优点是解析速度快,占用内存少.非常适合在Android移动设备中使用. SAX相关类及API DefaultHandler:是一个事

XML之SAX解析模型

DOM解析会把整个XML文件全部映射成Document里的树形结构,当遇到比较大的文件时,它的内存占用很大,查找很慢 SAX就是针对这种情况出现的解决方案,SAX解析器会从XML文件的起始位置起进行解析,同时根据已经定义好的事件处理器,来决定当前所解析的部分是否有必要进行记录并存储 import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public c

XML(十)- SAX解析

XML解析之 SAX解析 SAX介绍 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口. 与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. 当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口. 局限性: 1. SAX分析器在对XML文档进行分析时,触发了一系列的事件,由于事件触发本身是有时序性的,因此,SAX

XML(三)Sax解析XML

  两种解析方式: dom4j 和 sax 解析思想: book2.xml <?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>JAVA</书名> <作者>XXXXXX</作者> <售价>23333</售价> </书> <书> <书名>ANDROID</书名>

XML数据结构 SAX 解析

?SAX解析 SAX:Simple API for XML.基于事件驱动的解析?方式,逐?行解析 数据.(采?用协议回调机制) ?NSXMLParser类 NSXMLParser是iOS?自带的XML解析类.采?用SAX?方式解析数据. 解析过程由NSXMLParserDelegate协议?方法回调 解析过程:开始标签->取值->结束标签->取值 <?xml version = "1.0" encoding = "UTF-8"?> &l

【文件处理】xml 文件 SAX解析

SAX的全称是Simple APIs for XML,也即XML简单应用程序接口. 与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. 当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口. 局限性: 1. SAX分析器在对XML文档进行分析时,触发了一系列的事件,由于事件触发本身是有时序性的,因此,SAX提供的是一种顺序访问机制,对于已经分析