首页 > 学院 > 开发设计 > 正文

JAVA解析XML之SAX方式

2019-11-15 01:04:36
字体:
来源:转载
供稿:网友
java解析xml之SAX方式JAVA解析XML之SAX方式SAX解析xml步骤

  通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory  通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser  创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle

重写DefaultHandle类的方法

  startElement方法用来遍历xml文件的开始标签;

  endElement方法用来遍历xml文件的结束标签;

  startDocument方法用来标识解析开始;

  endDocument方法用来标识解析结束。

  characters方法用来获取text

  其中:参数qName 遍历到的元素的名称

     且同样会出现空白和换行的问题

下面直接上代码
<?xml version="1.0" encoding="UTF-8"?><bookstore>    <book id="1">        <name>JAVA编程思想</name>        <anthor>****</anthor>        <year>2000</year>    </book>    <book id="2">        <name>疯狂JAVA系列</name>        <anthor>李刚</anthor>        <PRice>89</price>    </book></bookstore>
books.xmlSAX.java
package pers.zww.xml.handler;import javax.xml.stream.events.StartElement;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXParserHandler extends DefaultHandler{    int bookIndex=0;    /*     * 解析XML元素     */    @Override    public void startElement(String uri, String localName, String qName,            Attributes attributes) throws SAXException {        super.startElement(uri, localName, qName, attributes);        //开始解析book元素的属性                if (qName.equals("book")) {            bookIndex++;            System.out.println("开始遍历第"+bookIndex+"本书");            //            //已知book元素下的属性名称,根据属性名称获取属性值//            String value=attributes.getValue("id");//            System.out.println("book的属性值:"+value);            //未知book元素下的属性名称及个数            int num=attributes.getLength();            for (int i = 0; i < num; i++) {                System.out.print("book元素的第"+(i+1)+"个属性名:"+attributes.getQName(i));                System.out.println(" && 属性值:"+attributes.getValue(i));                            }        }else if(!qName.equals("book")&&!qName.equals("bookstore")){            System.out.print("节点名:"+qName);                    }else {                    }    }    @Override    public void characters(char[] ch, int start, int length)            throws SAXException {        // TODO Auto-generated method stub        super.characters(ch, start, length);        String val=new String(ch, start, length);        if (!val.trim().equals("")) {            System.out.println(" && 节点值:"+val);        }    }        /*     * 用来遍历xml文件的结束标签     */    @Override    public void endElement(String uri, String localName, String qName)            throws SAXException {        super.endElement(uri, localName, qName);        //是否针对一本书已经遍历结束        if (qName.equals("book")) {            System.out.println("=======================");        }    }        /*     * 用来标志解析开始     */    @Override    public void startDocument() throws SAXException {        // TODO Auto-generated method stub        super.startDocument();        //第一行开始        System.out.println("SAX解析开始");    }        /*     * 用来标志解析结束     */    @Override    public void endDocument() throws SAXException {        // TODO Auto-generated method stub        super.endDocument();        //最后一行结束        System.out.println("SAX解析结束");    }}
SAXParserHandler.javaSAX与DOM对比

  DOM解析原理:先把XML文件整个加载到内存中,在逐个解析;

  SAX解析原理:通过自己创建的Handler类,去逐个分析遇到的每一个节点;(节点分析是从最外层向里层逐个开始).

参考资料

  慕课网JessicaJiang老师视频教程 链接:http://www.imooc.com/video/3789


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表