继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

jaxp解析器——sax

零基础h5前端入门培训
关注TA
已关注
手记 301
粉丝 37
获赞 253

   上篇对采用jaxp解析器使用dom技术解析xml做了一个介绍,对jaxp解析器使用sax技术解析xml则一笔带过了,接下来我们看看jaxp采用sax技术是如何解析xml的呢。

   采用sax技术解析xml是依靠于事件驱动的,边读边解析,相关类位于javax.xml.parsers包里面

           **SAXParser    此类的实例可以从SAXParserFactory的newSAXParser( )方法获得

                     |_ Parser( File f , DefaultHandler dh )   两个参数   *第一个参数:xml的路径    *第二个参数:事件处理器

           **SAXParserFactory     其实例可以通过本身的newInstance()方法得到

   **SAX执行过程

            |- 当解析到开始标签的时,自动执行startElement()方法

            |- 当解析到文本的时,自动执行characters()方法

            |_ 当解析到结束标签时,自动执行endElement()方法


   **使用jaxp的sax方式来解析xml

            *sax方式不能实现增删改操作,只能做查询操作

            *打印整个xml文档

                   执行parse()方法,第一个参数是xml路径,第二个参数是事件处理器

                           **创建一个类,继承事件处理器的类

                           **重写里面的三个方法

public class TestSax {    public static void main(String[] args) throws Exception {        /*         * 1、创建解析器工厂         * 2、根据工厂得到解析器         * 3、调用解析器的parse方法         * 4、创建继承事件处理器的类         */        //1、创建解析器工厂        SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();        //2、根据工厂得到解析器        SAXParser saxParser=saxParserFactory.newSAXParser();        //3、调用解析器的parse方法        saxParser.parse("src/persion.xml", new MyHandler());    }}class MyHandler extends DefaultHandler{    @Override    public void startElement(String uri, String localName, String qName,            Attributes attributes) throws SAXException {        System.out.print("<"+qName+">");    }    @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        System.out.print(new String(ch,start,length));    }    @Override    public void endElement(String uri, String localName, String qName)            throws SAXException {        System.out.print("</"+qName+">");    }    }

            *获取到所有name的值

                           **定义一个成员变量flag=false

                           **判断开始方法是否是name元素,如果是name元素,把flag设置为true

                           **如果flag值为true,在character()方法里面打印内容

                           **当执行到结束方法时,把flag值设置成false

public class TestSax {    public static void main(String[] args) throws Exception {        /*         * 1、创建解析器工厂         * 2、根据工厂得到解析器         * 3、调用解析器的parse方法         * 4、创建继承事件处理器的类         */        //1、创建解析器工厂        SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();        //2、根据工厂得到解析器        SAXParser saxParser=saxParserFactory.newSAXParser();        //3、调用解析器的parse方法        saxParser.parse("src/persion.xml", new MyHandler1());    }}class MyHandler1 extends DefaultHandler{    boolean flag=false;    @Override    public void startElement(String uri, String localName, String qName,            Attributes attributes) throws SAXException {        if("name".equals(qName)){            flag=true;        }    }    @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        if(flag==true){            System.out.println(new String(ch,start,length));        }    }    @Override    public void endElement(String uri, String localName, String qName)            throws SAXException {        if("name".equals(qName)){            flag=false;        }    }}

            *获取到第一个name的值

public class TestSax {    public static void main(String[] args) throws Exception {        /*         * 1、创建解析器工厂         * 2、根据工厂得到解析器         * 3、调用解析器的parse方法         * 4、创建继承事件处理器的类         */        //1、创建解析器工厂        SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();        //2、根据工厂得到解析器        SAXParser saxParser=saxParserFactory.newSAXParser();        //3、调用解析器的parse方法        saxParser.parse("src/persion.xml", new MyHandler1());    }}class MyHandler1 extends DefaultHandler{    boolean flag=false;    int idx=1;    @Override    public void startElement(String uri, String localName, String qName,            Attributes attributes) throws SAXException {        if("name".equals(qName)&&idx==1){            flag=true;        }    }    @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        if(flag==true){            System.out.println(new String(ch,start,length));        }    }    @Override    public void endElement(String uri, String localName, String qName)            throws SAXException {        if("name".equals(qName)){            flag=false;            idx++;        }    }}


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP