<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 花開有時 閱讀(1970) 評論(1)  編輯  收藏 所屬分類: java

    評論

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

    恭喜樓主
    2007-09-27 19:26 | 千里冰封
    主站蜘蛛池模板: 亚洲日韩VA无码中文字幕| 国产成人精品免费直播| 亚洲乳大丰满中文字幕| 一级毛片在线免费视频| 国产日韩成人亚洲丁香婷婷| 一级毛片免费毛片毛片| 亚洲日韩人妻第一页| 国产成人精品免费大全| 人人狠狠综合久久亚洲婷婷| 久久免费高清视频| 亚洲日韩乱码中文无码蜜桃| 免费无码又黄又爽又刺激| 亚洲日韩一区精品射精| 又粗又大又猛又爽免费视频| 五月天国产成人AV免费观看| 亚洲精品无码精品mV在线观看| 女同免费毛片在线播放| 亚洲视频免费观看| 成人免费视频软件网站| 香蕉视频免费在线播放| 亚洲午夜未满十八勿入网站2| 亚洲午夜免费视频| 亚洲av无码电影网| 免费少妇a级毛片人成网| 91视频免费观看| 亚洲精品福利网站| 免费观看午夜在线欧差毛片 | 中文字幕亚洲日本岛国片| 在线观看黄片免费入口不卡| 亚洲日本国产精华液| 四虎影在线永久免费观看| 最近免费中文字幕中文高清 | 亚洲日本在线免费观看| 自拍偷区亚洲国内自拍| 精品国产人成亚洲区| 18禁无遮挡无码国产免费网站| 亚洲av中文无码字幕色不卡| 亚洲级αV无码毛片久久精品| 中文免费观看视频网站| 人妻仑刮八A级毛片免费看| 亚洲色大成网站www永久|