<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    花開有時

    花開有時,花落有時,來有時,去有時。不撕扯,只關切;不紀念,只牽掛;不感動,只明白;不尋找,只記得。
    隨筆 - 24, 文章 - 0, 評論 - 54, 引用 - 0
    數據加載中……

    成功!用SAX讀取XML文件。

    上次是用DOM讀取的XML文件,我接著書往下讀又發現了用SAX讀取文件的方法,當然是用Groovy寫的,我把它改為用java寫的了,代碼如下:

    package test;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.IOException;

    import java.util.ArrayList;

    import java.util.List;

    import javax.xml.parsers.ParserConfigurationException;

    import javax.xml.parsers.SAXParserFactory;

    import org.xml.sax.Attributes;

    import org.xml.sax.InputSource;

    import org.xml.sax.SAXException;

    import org.xml.sax.XMLReader;

    import org.xml.sax.helpers.DefaultHandler;

    publicclass JSAX {

        publicstaticvoid main(String[] args) {

            DefaultHandler handler = new PlanHandler();

           try {

               XMLReader reader = SAXParserFactory.newInstance().newSAXParser()

                       .getXMLReader();

               reader.setContentHandler(handler);

               FileInputStream inpustStream = new FileInputStream(

                       "./src/data/pla.xml");

               reader.parse(new InputSource(inpustStream));

               inpustStream.close();

               System.out.println(((PlanHandler) handler).getUnderway());

               System.out.println(((PlanHandler) handler).getUpcoming());

           } catch (SAXException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           } catch (ParserConfigurationException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           } catch (FileNotFoundException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           } catch (IOException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           }

        }

    }

    class PlanHandler extends DefaultHandler {

        List underway = new ArrayList();

        List upcoming = new ArrayList();

        @Override

        publicvoid startElement(String uri, String localName, String name,

               Attributes attributes) throws SAXException {

           if (!name.equals("task"))

               return;

            String title = attributes.getValue("title");

            String total = attributes.getValue("total");

            String done = attributes.getValue("done");

            switch (Integer.valueOf(done)) {

           case 0:

               upcoming.add(title);

               break;

            default:

               if (!total.equals(done))

                   underway.add(title);

           }

        }

        public List getUnderway() {

            returnunderway;

        }

        public List getUpcoming() {

            returnupcoming;

        }

    }

    輸出結果是:

    [use in current project]

    [re-read DB chapter, use DB/XML combination]

    從代碼上來看,SAXDOM復雜了一些,主要是要寫一個處理器類PlanHandler用來處理xml文件,而且Sax好像還不能在樹形數據結構中進行位置的操作。書上說SAXPush-Style型的(推型?),現在在java里處理xml文件的趨勢是用Pull-Style型的(拉型?),在這之中最普遍的分析器是叫StAX-based parsers,不過這個是在java6中有,我沒有java6的開發包,只能看看書上的代碼了。

    下面是書上用Groovy寫的代碼:

    import javax.xml.parsers.SAXParserFactory

    import org.xml.sax.*

    import org.xml.sax.helpers.DefaultHandler

    class PlanHandler extends DefaultHandler {

    def underway = []

    def upcoming = []

    void startElement(String namespace, String localName,

    String qName, Attributes atts) {

    if (qName != 'task') return

    def title = atts.getValue('title')

    def total = atts.getValue('total')

    switch (atts.getValue('done')) {

    case'0' : upcoming << title ; break

    case { it != total } : underway << title ; break

    }

    }

    }

    def handler = new PlanHandler()

    def reader = SAXParserFactory.newInstance()

    .newSAXParser().xMLReader

    reader.contentHandler = handler

    def inputStream = new FileInputStream('data/plan.xml')

    reader.parse(new InputSource(inputStream))

    inputStream.close()

    assert handler.underway == [

    'use in current project'

    ]

    assert handler.upcoming == [

    're-read DB chapter',

    'use DB/XML combination'

    ]

    說實話,Groovy在至少在編寫小程序上來說比java要方便很多。

    posted on 2007-09-24 16:55 花開有時 閱讀(1969) 評論(1)  編輯  收藏 所屬分類: java

    評論

    # re: 成功!用SAX讀取XML文件。  回復  更多評論   

    恭喜樓主
    2007-09-27 19:26 | 千里冰封
    主站蜘蛛池模板: 四虎影视在线永久免费看黄 | 精品一区二区三区无码免费直播| 99在线观看免费视频| 精品国产亚洲男女在线线电影| 亚洲中文字幕乱码熟女在线| 24小时免费看片| 亚洲七七久久精品中文国产| 亚洲国产AV无码一区二区三区| 免费的一级黄色片| 在线亚洲午夜片AV大片| 波多野结衣免费在线观看| 亚洲成a人片77777老司机| 免费精品99久久国产综合精品| 国产午夜亚洲不卡| 一级毛片在线免费播放| 亚洲Av无码乱码在线观看性色| 亚洲精品天堂无码中文字幕| 免费无码AV片在线观看软件| 亚洲午夜精品国产电影在线观看| 99久在线国内在线播放免费观看| 久久亚洲国产成人亚| 日韩免费观看一区| 亚洲国产精品福利片在线观看| 中文在线日本免费永久18近| 亚洲成a人无码av波多野按摩| 日日狠狠久久偷偷色综合免费| 免费黄色一级毛片| 亚洲av无码一区二区三区在线播放| 日韩在线播放全免费| jizzjizz亚洲| 亚洲免费黄色网址| 亚洲AV蜜桃永久无码精品| 久久成人免费电影| 亚洲av无码专区亚洲av不卡| 亚洲欧洲美洲无码精品VA| 国产免费不卡v片在线观看| 免费国产a理论片| 亚洲视频免费在线看| 日本牲交大片免费观看| 免费黄网站在线看| 国产精品亚洲专区无码WEB|