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

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

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

    使用SAX解析XML文檔

    步驟1.一個簡單的XML文檔:
    ???XML代碼:
    <?xml?version="1.0"?encoding="GBK"?>??
    <StudentInfo>??
    ????
    <student>??
    ????????
    <name>趙海波</name>??
    ????????
    <sex></sex>??
    ????????
    <lesson>??
    ????????????
    <lessonName>Spring整合開發</lessonName>??
    ????????????
    <lessonScore>85</lessonScore>??
    ????????
    </lesson>??
    ????????
    <lesson>??
    ????????????
    <lessonName>輕量級J2EE應用開發</lessonName>??
    ????????????
    <lessonScore>95</lessonScore>??
    ????????
    </lesson>??
    ????????
    <lesson>??
    ????????????
    <lessonName>Ajax應用開發</lessonName>??
    ????????????
    <lessonScore>80</lessonScore>??
    ????????
    </lesson>??
    ????
    </student>??
    ????
    <student>??
    ????????
    <name>程衛娜</name>??
    ????????
    <sex></sex>??
    ????????
    <lesson>??
    ????????????
    <lessonName>Spring整合開發</lessonName>??
    ????????????
    <lessonScore>80</lessonScore>??
    ????????
    </lesson>??
    ????????
    <lesson>??
    ????????????
    <lessonName>輕量級J2EE應用開發</lessonName>??
    ????????????
    <lessonScore>85</lessonScore>??
    ????????
    </lesson>??
    ????????
    <lesson>??
    ????????????
    <lessonName>Ajax應用開發</lessonName>??
    ????????????
    <lessonScore>90</lessonScore>??
    ????????
    </lesson>??
    ????
    </student>??
    </StudentInfo>??

    步驟2.用于處理XML文檔的事件監聽器:
    ???Java代碼:

    import?org.xml.sax.*;???
    public?class?XMLContentHandler?implements?ContentHandler???
    {??????
    ????
    //DTD中定義的元素名???
    ????private?static?final?String?ELEMENT_NAME?=?"name";???
    ????
    private?static?final?String?ELEMENT_SEX?=?"sex";???
    ????
    private?static?final?String?ELEMENT_LESSON?=?"lesson";???
    ????
    private?static?final?String?ELEMENT_LESSON_NAME?=?"lessonName";???
    ????
    private?static?final?String?ELEMENT_LESSON_SCORE?=?"lessonScore";???
    ????
    private?static?final?String?ELEMENT_STUDENT?=?"student";???
    ????
    private?static?final?String?ELEMENT_LINE?=?"breakLine";????
    ????
    //當前元素的數據???
    ????private?String?currentData?=?"";???
    ????
    private?String?lessonName?=?"";???
    ????
    private?String?lessonScore?=?"";???
    ????
    //當其他某一個調用事件發生時,先調用此方法來在文檔中定位。???
    ????public?void?setDocumentLocator(Locator?locator)???
    ????
    {???
    ????}
    ???
    ????
    //在解析整個文檔開始時調用???
    ????public?void?startDocument()?throws?SAXException???
    ????
    {???
    ????????System.out.println(
    "XML文件開始解析");???
    ????}
    ???
    ????
    //在解析整個文檔結束時調用???
    ????public?void?endDocument()?throws?SAXException???
    ????
    {???
    ????????System.out.println(
    "XML文件解析結束");???
    ????}
    ???
    ????
    //?在解析命名空間開始時調用???
    ????public?void?startPrefixMapping(String?prefix,?String?uri)?throws?SAXException???
    ????
    {???
    ????????System.out.println(
    "XML解析器開始解析命名空間");???
    ????}
    ???
    ????
    //在解析命名空間結束時調用???
    ????public?void?endPrefixMapping(String?prefix)?throws?SAXException???
    ????
    {???
    ????????System.out.println(
    "XML解析器解析命名空間結束");???
    ????}
    ???
    ????
    //在解析元素開始時調用???
    ????public?void?startElement(String?namespaceURI,?String?localName,String?qName,?Attributes?atts)?throws?SAXException???
    ????
    {???
    ????????System.out.println(
    "XML解析器開始解析元素"?+?localName);???
    ????}
    ???
    ????
    //在解析元素結束時調用???
    ????public?void?endElement(String?namespaceURI,?String?localName,?String?qName)?throws?SAXException???
    ????
    {???
    ????????
    if?(localName.equals(ELEMENT_NAME))???
    ????????
    {???
    ????????????System.out.println(localName?
    +?"????:????"?+?currentData);???
    ????????}
    ???
    ????????
    if?(localName.equals(ELEMENT_SEX))???
    ????????
    {???
    ????????????System.out.println(localName?
    +?"?????:?????"?+?currentData);???
    ????????}
    ???
    ????????
    if?(localName.equals(ELEMENT_LESSON_NAME))???
    ????????
    {???
    ????????????
    this.lessonName?=?currentData;???
    ????????}
    ???
    ????????
    if?(localName.equals(ELEMENT_LESSON_SCORE))???
    ????????
    {???
    ????????????
    this.lessonScore?=?currentData;???
    ????????}
    ???
    ????????
    if?(localName.equals(ELEMENT_LESSON))???
    ????????
    {???
    ????????????System.out.println(lessonName?
    +?"??????:?????"?+?lessonScore);???
    ????????}
    ???
    ????????System.out.println(
    "XML解析器解析元素"?+?localName?+?"結束");???
    ????}
    ???
    ????
    //?取得元素數據???
    ????public?void?characters(char[]?ch,?int?start,?int?length)?throws?SAXException???
    ????
    {???
    ????????currentData?
    =?new?String(ch,?start,?length).trim();???
    ????????System.out.println(
    "XML解析器成功解析到元素數據");???
    ????}
    ???
    ????
    //取得元素數據中的空白???
    ????public?void?ignorableWhitespace(char[]?ch,?int?start,?int?length)?throws?SAXException???
    ????
    {???
    ????}
    ???
    ????
    //在解析到處理指令時,調用此方法。???
    ????public?void?processingInstruction(String?target,?String?data)?throws?SAXException???
    ????
    {???
    ????}
    ???
    ????
    //當未驗證解析器忽略實體時調用此方法???
    ????public?void?skippedEntity(String?name)?throws?SAXException???
    ????
    {???
    ????}
    ???
    }
    ??

    步驟3.通過主程序開始解析XML文檔,解析XML文檔的代碼如下:
    ???java代碼:
    import?java.io.*;???
    import?org.xml.sax.*;???
    import?org.xml.sax.helpers.*;???
    public?class?SAXParser???
    {???
    ????
    public?static?void?main(String[]?args)???
    ????
    {???
    ????????SAXParser?sax?
    =?new?SAXParser();???
    ????????sax.parseXMLFile(
    "student.xml");???
    ????}
    ???
    ????
    //?解析文檔???
    ????private?void?parseXMLFile(String?fileName)???
    ????
    {??????????
    ????????
    try??
    ????????
    {???
    ????????????
    //通過指定解析器的名稱來動態加載解析器???
    ????????????XMLReader?parser?=?XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");???
    ????????????
    //處理內容前要注冊內容管理器???
    ????????????parser.setContentHandler(new?XMLContentHandler());???
    ????????????
    //開始解析文檔???
    ????????????parser.parse(fileName);???
    ????????}
    ???
    ????????
    catch?(IOException?e)???
    ????????
    {???
    ????????????e.printStackTrace();???
    ????????}
    ???
    ????????
    catch?(SAXException?e)???
    ????????
    {???
    ????????????e.printStackTrace();???
    ????????}
    ???
    ????}
    ???
    }
    ??

    posted on 2008-09-28 11:09 nonels 閱讀(1762) 評論(5)  編輯  收藏 所屬分類: J2EE

    評論

    # re: 使用SAX解析XML文檔[未登錄] 2009-05-22 14:44 tiger

    您寫的很清楚,謝謝啊,中國需要這樣的人才,支持您,我也是研究xml應用的研究生,不過自己剛開始學習,看過您的文檔后收獲很多。我的郵箱是tjnuwanghu◎163.com 最近在做個導師給的任務,要將一個xml文檔解析成類似注冊表那樣的列表,用的解析器是xerces-c++,自己在虛擬機linux上安裝了此解析器,但還是不會用它寫程序來簡單解析xml文檔,您有時間了給我看看,舉個例子,先謝謝您哦。

    徒弟  回復  更多評論   

    # re: 使用SAX解析XML文檔 2009-08-07 08:51 路過

    樓上的 如果你真的是研究生的話 那中國完了 我是一高中生 上面的例子也沒什么難的   回復  更多評論   

    # re: 使用SAX解析XML文檔 2009-08-12 14:42 心靈探索者

    聞道有先后,授業有專攻  回復  更多評論   

    # re: 使用SAX解析XML文檔 2009-08-17 22:24 Fucher

    高中生很適合干這個。  回復  更多評論   

    # re: 使用SAX解析XML文檔 2009-12-02 23:27 hello

    研究生? 雷死...  回復  更多評論   

    <2008年9月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆分類(16)

    隨筆檔案(16)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲av丰满熟妇在线播放| 亚洲精品乱码久久久久久| 久久亚洲国产成人影院| 亚色九九九全国免费视频| 亚洲国产精品午夜电影| 69pao强力打造免费高清| 亚洲国产精品日韩在线| 台湾一级毛片永久免费| 亚洲国产福利精品一区二区| 一个人免费观看视频www| 亚洲国产精品无码久久| 免费亚洲视频在线观看| 亚洲免费在线观看| 亚洲av色影在线| 4399好看日本在线电影免费| 亚洲日本VA中文字幕久久道具| 暖暖日本免费在线视频| 一本岛v免费不卡一二三区| 亚洲av无码专区在线播放| 麻豆高清免费国产一区| 亚洲精华国产精华精华液网站| 又大又硬又爽免费视频| 两个人看的www免费| 亚洲码一区二区三区| 波多野结衣久久高清免费 | 国产精品V亚洲精品V日韩精品| 中文字幕乱码免费看电影| 91在线精品亚洲一区二区| 国产小视频免费观看| 久久久久女教师免费一区| 亚洲国产成人精品不卡青青草原| 国色精品卡一卡2卡3卡4卡免费| 亚洲日韩精品国产3区| 亚洲毛片不卡av在线播放一区| 久久久久国产精品免费网站| 亚洲一级特黄特黄的大片 | 91精品国产亚洲爽啪在线影院 | 91黑丝国产线观看免费| 无套内射无矿码免费看黄| 亚洲AV日韩精品久久久久久| 在线免费观看一级毛片|