第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Java 解析xml 之 SAX解析

SAX是什么
SAX是一种快速读写XML数据的方式。
局限

1.SAX分析器在解析xml文档时,触发了一系列事件,因为事件本身是有时序性的。因此SAX一旦经过了某个元素,没有办法返回再去访问。

2.SAX分析器只事检查xml文档中的字节流,语法,然后触发相应事件。而处理函数本身则要由程序实现,相比DOM,SAX缺乏灵活性。

优势

SAX分析器实现简单,对内存要求比较低,因此实现小路比较高;对于大型的xml文档来说,通常会用SAX而不用DOM;对于那些只需要访问xml文档中的数据而不对文档进行更改的应用程序来说,SAX分析器更为合适。

SAX实例解析
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>

    <book category="man">
        <title lang="en">Juny Of City</title>
        <author>Juny</author>
        <year>2011</year>
        <price>15.99</price>
    </book>

    <book category="children">
          <title lang="en">Harry Potter</title> 
          <author>J K. Rowling</author> 
          <year>2005</year> 
          <price>29.99</price> 
    </book>
</bookstore>
解析过程
package sax;

import java.io.File;
import java.util.Stack;

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

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxTest2 {
    public static void main(String[] args) throws Exception {
        // step 1: 获得SAX解析器工厂实例
        SAXParserFactory factory = SAXParserFactory.newInstance();

        // step 2: 获得SAX解析器的实例
        SAXParser parser = factory.newSAXParser();

        // step 3: 开始进行解析
        // 传入待解析的文档的处理器
        parser.parse(new File("books.xml"),new MySAXHandler());
    }
}

class MySAXHandler extends DefaultHandler {
    // 使用栈这个数据结构来保存
    private Stack<String> stack = new Stack<String>();

    // 数据
    private String title;
    private String author;
    private String year;
    private double price;

    @Override
    public void startDocument() throws SAXException {
        System.out.println("start document-> parse begin");
    }

    @Override
    public void endDocument() throws SAXException {
        System.out.println("end document-> parse finished");
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {

        // 将标签名压入栈
        stack.push(qName);

        // 处理属性
        for (int i = 0; i < attributes.getLength(); i++) {
            String attrName = attributes.getQName(i);
            String attrValue = attributes.getValue(i);

            System.out.println("属性:" + attrName + ":" + attrValue);

        }

    }

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

        // 取出标签名
        String tag = stack.peek();

        if ("title".equals(tag)) {
            title = new String(ch, start, length);

        } else if ("author".equals(tag)) {
            author = new String(ch, start, length);
        } else if ("year".equals(tag)) {
            year = new String(ch, start, length);
        } else if ("price".equals(tag)) {
            price = Double.parseDouble(new String(ch, start, length));
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        stack.pop();//表示该元素解析完毕,需要从栈中弹出标签

        if("book".equals(qName)){
            System.out.println("Book info: -------");
            System.out.println("    title: " + title);
            System.out.println("    author: " + author);
            System.out.println("    year: " + year);
            System.out.println("    price: " + price);
            System.out.println();
        }
    }
}
## 控制台输出 ##
start document-> parse begin
属性:category:man
属性:lang:en
Book info: -------
    title: Juny Of City
    author: Juny
    year: 2011
    price: 15.99

属性:category:children
属性:lang:en
Book info: -------
    title: Harry Potter
    author: J K. Rowling
    year: 2005
    price: 29.99

end document-> parse finished
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消