SAX解析

来源:互联网 发布:mac mini 2012拆机 编辑:程序博客网 时间:2024/04/30 12:15

SAX

SAX解析

  1.SAX

在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。

SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。

SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器:

解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。

解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。

事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。

 2.SAX方式解析XML文档

使用SAXParserFactory创建SAX解析工厂

SAXParserFactory spf =SAXParserFactory.newInstance();

通过SAX解析工厂得到解析器对象     

SAXParser sp = spf.newSAXParser();

通过解析器对象得到一个XML的读取器

XMLReader xmlReader = sp.getXMLReader();

设置读取器的事件处理器     

xmlReader.setContentHandler(newBookParserHandler());

解析xml文件   

xmlReader.parse("book.xml");

 3实例

   (1)

public class Demo01{

    public static void main(String[] args)throws  Exception {

        //sax的解析工厂

        SAXParserFactoryspf = SAXParserFactory.newInstance();

        //sax的解析器

        SAXParsersparser = spf.newSAXParser();

        //获取阅读器

        XMLReaderxReader = sparser.getXMLReader();

        //注册解析器

        xReader.setContentHandler(newContentHandler(){

            public voidstartElement(String uri, String localName, String qName,

            Attributesatts) throws SAXException {

                System.out.println("<"+qName+">"); 

    }

    public voidendElement(String uri, String localName, String qName)

            throwsSAXException {

        System.out.println("</"+qName+">");

    }

    public voidcharacters(char[] ch, int start, int length)

            throwsSAXException {

        System.out.println(new String(ch,start,length));   

    }

    public voidendDocument() throws SAXException {

        // TODOAuto-generated method stub

});    

//解析xml文档

xReader.parse("src\\book.xml");            

  }

}

(2)

   public staticvoid main(String[] args) throws Exception{

        SAXParserFactory spf = SAXParserFactory.newInstance(); 

        SAXParser sParser = spf.newSAXParser();

        XMLReader xReader = sParser.getXMLReader();

        xReader.setContentHandler(new MyHandler());

        xReader.parse("src\\book.xml");

    }

}

class MyHandler extends DefaultHandler{

    int count=0; //记录作用

    int pos = 2; //获取的位置

    boolean flag =false;

    @Override

    public voidcharacters(char[] ch, int start, int length)

            throwsSAXException {

        if(count==pos && flag){

            System.out.println(newString(ch,start,length));

        }

    }

    @Override

    public voidendElement(String uri, String localName, String qName)

            throwsSAXException {

       

        if(qName.equals("author")){

            count++;

            flag=false;

        }      

    }

 

    @Override

    public voidstartElement(String uri, String localName, String qName,

            Attributesattributes) throws SAXException {

            if(qName.equals("author")){

            flag=true;

        }  

    }  

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 中国人在越南办结婚证怎么办? 无线网被限速了怎么办 联通大王卡上传速度慢怎么办 小米手机下载视频速度慢怎么办 大疆御air脚架断了怎么办 大疆飞行器线断了怎么办 移动校园卡套餐到期后怎么办 流量年包到期了怎么办 家里无线网信号不好怎么办 无线网光信号红灯了怎么办 机顶盒获取不了lp地址怎么办 32内存卡丢了怎么办 手机上的相机找不到了怎么办 有刘鑫这样的闺蜜该怎么办 电脑开机网络初始化失败怎么办 电脑放音乐没有声音怎么办 苹果手机gprs信号弱怎么办 苹果导航gprs信号弱怎么办 au没有波形 没有声音怎么办 屏幕驱动板坏了怎么办 安吉星流量超了怎么办 网络被伪基站覆盖怎么办 骨头渣子卡嗓子里怎么办 执法仪记录仪关不了机怎么办 执法记录仪开不了机怎么办 华为警务通丢了怎么办 华德安执法记录仪死机怎么办 行车仪内存满了怎么办 海康威视摄像头没有通道怎么办 电脑屏膜变大了怎么办 手机2g模块坏了怎么办 腾讯大王卡是2g怎么办 华为手机4g坏了怎么办 优盘中毒打不开怎么办 vr头戴链接不起怎么办 人在缺氧的时候怎么办 脑缺氧供血不足怎么办 睡多了大脑缺氧怎么办 吃了过期的东西怎么办 吃了过期的牛肉怎么办 生存战争肉腐烂了怎么办?