XML解析之SAX解析

SAX解析。。。不想寫

BB兩句

不想寫,都是差不多的套路。

走起

首先獲取工廠類,然后獲取用于解析xml的對(duì)象,SAX和DOM是java提供的,不用導(dǎo)入jar包什么的。

      SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
      SAXParser saxParser = saxParserFactory.newSAXParser();

然后,開始解析,老套路,android不可能把獲取的xml字符串寫到文件中,太麻煩,看上一篇DOM,里面有寫方法。

    UserHandler userHandler = new UserHandler();
    saxParser.parse(new FileInputStream("src/user.xml"),userHandler);

UserHandler這是什么鬼,這個(gè)是自己寫的類繼承了DefaultHandler,這個(gè)DefaultHandler又是什么鬼呢。SAX解析最重要的就是這個(gè)類了,所有的解析操作都在這個(gè)類里面。

繼承Defaulthandler復(fù)寫他的方法

看代碼

    public class UserHandler extends DefaultHandler {

    private UserBean userBean = null;
    private List<UserBean> userBeanList = null;
    private String name;


    /**
     * 解析到根節(jié)點(diǎn)執(zhí)行,基本上算是只執(zhí)行一次,可以在這里進(jìn)行相關(guān)初始化操作
     * @throws SAXException
     */
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        userBeanList = new ArrayList<>();
    }

    /**
     * 解析完成執(zhí)行該方法,其他方法還有很多,可復(fù)寫之后打印生命周期進(jìn)行了解
     * @throws SAXException
     */
    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
    }

    /**
     * 解析到每個(gè)節(jié)點(diǎn)的時(shí)候調(diào)用該方法,也就是多次調(diào)用,調(diào)用次數(shù)看xml子節(jié)點(diǎn)有多少,參數(shù)直接打印出來查看
     * @param uri
     * @param localName
     * @param qName 節(jié)點(diǎn)名字
     * @param attributes 屬性
     * @throws SAXException
     */
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        name = qName;
        if ("user".equals(qName)){
            userBean = new UserBean();
            for (int i = 0; i < attributes.getLength(); i++) {
                userBean.setId(attributes.getValue(i));
            }
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if ("user".equals(qName)){
            userBeanList.add(userBean);
            userBean = null;
        }
    }

    /**
     * 嗯哼,打印出來看看,new String(ch, start, length).trim();這個(gè)是獲取當(dāng)前節(jié)點(diǎn)的值,new String(ch)可以打印出看看,我第一次看也是懵逼了
     * @param ch
     * @param start
     * @param length
     * @throws SAXException
     */
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        String str = new String(ch, start, length).trim();
        if (!"".equals(str)) {
            if ("name".equals(name)){
                userBean.setName(str);
            }else if ("age".equals(name)){
                userBean.setAge(str);
            }
        }

    }

    public List<UserBean> getUserBeanList(){
        return userBeanList;
    }
 }
    

UserBean

    public class UserBean {
    private String name;
    private String age;
    private String id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "UserBean{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }
 }

簡(jiǎn)單解析到此結(jié)束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 之前想寫一個(gè)JAXB解析xml與實(shí)體類轉(zhuǎn)換的,但是發(fā)現(xiàn)JAXB有一定的局限性,有時(shí),在解析非標(biāo)準(zhǔn)xml中的屬性值時(shí)...
    夜凝夕_a0fc閱讀 1,175評(píng)論 0 4
  • 新增鏈接http://m.blog.csdn.net/article/details?id=7305068,這一篇...
    來個(gè)芒果閱讀 1,490評(píng)論 0 1
  • 1. XML總結(jié) 1.1. XML簡(jiǎn)介 XML : 可擴(kuò)展的標(biāo)記語言。(和HTML非常類似的) 可擴(kuò)展的。 自定義...
    Ethan_Walker閱讀 3,386評(píng)論 0 12
  • 什么是XML解析? 所謂XML解析,就是讀取以及操作XML文檔中的數(shù)據(jù)。對(duì)于Java來說,主要有三種模式:DOM、...
    tobe_superman閱讀 677評(píng)論 0 2
  • 項(xiàng)目地址:https://github.com/liaozhoubei/HttpAndParse XML是一種非常...
    寶塔山上的貓閱讀 4,632評(píng)論 1 9

友情鏈接更多精彩內(nèi)容