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

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

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

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
    用SAX解析xml文件的例子
    2008-07-15 09:46
    1. Xml技術簡介
    Xml文件有兩種約束類型,包括文檔類型定義(DTD)和Xml 模式(Schema)。Xml DTD被包含在xml1的標準里。Xml 模式被包含在W3C的標準中。在xml 數據和xml 模式兩者之間有很多的區別。
    A. xml模式支持的數據類型比xml DTD多;
    B. xml模式在無序的情況下使用起來比xml DTD更方便;
    C. xml模式支持名字空間,可以在不同的文件中定義相同的方法等。
    D. xml模式形成的文檔可以被多種標準解析,如dom,sax或者jdom等,而xml DTD方式下確不行。
    2. Xml文件解析
    在java語言環境里可以使用三種方法解析xml文件:dom(document object model),sax(simple api for xml)和jdom(java document object model)。
    SAX提供了基于事件的方式進行解析,適合于快速,數據量小的解析情況。SAX解析有幾個缺陷:A.它的解析是連續的;B.數據無法回朔。
    DOM解析不同于SAX。它提供了內存中完整的xml數據映像,數據被存儲在樹狀結構中。DOM解析方式更容易獲得和處理數據。
    JDOM是java語言中特有的,主要用來支持xpath標準。
    3. SAX解析方式
    上面我簡要介紹了幾種解析xml文件的技術,這里我們使用SAX技術給出一個小例子,大家可以從這個例子中發現如果你能夠掌握一些開源軟件包,你就可以很 快掌握解析xml數據的技術。
    3.1制作一個簡單的xml文件component.xml
    <?xml version="1.0"?>
    <XmlComponents>
    <XmlComponent>
    <ComNo>1</ComNo>
    </XmlComponent>
    </XmlComponents>

    3.2下載xerces.jar軟件包
    在Apache網站上×××下載xerces.jar軟件包,這個包中包含了上面我們列舉的幾種解析xml數據的API。然后將這個軟件包加入到程序的 classpath中。
    3.3制作解析類MySaxParser.java
    import java.io.IOException;
    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    import javax.xml.parsers.*;

    public class MySaxParser extends DefaultHandler {
    private static int INDENT = 2;

    // 運行主方法
    public static void main(String[] argv) {
    // if (argv.length != 1) {
    // System.out.println("Usage: java ds.MySaxParser [URI]");
    // System.exit(0);
    // }
    System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");
    // String uri = argv[0];
    String uri = "Components.xml";
    try {
    SAXParserFactory parserFactory = SAXParserFactory.newInstance();
    parserFactory.setValidating(false);
    parserFactory.setNamespaceAware(false);
    MySaxParser MySaxParserInstance = new MySaxParser();
    SAXParser parser = parserFactory.newSAXParser();
    parser.parse(uri, MySaxParserInstance);
    }
    catch(IOException ex) {
    ex.printStackTrace();
    }
    catch(SAXException ex) {
    ex.printStackTrace();
    }
    catch(ParserConfigurationException ex) {
    ex.printStackTrace();
    }
    catch(FactoryConfigurationError ex) {
    ex.printStackTrace();
    }

    }

    private int idx = 0; //indent
    // 處理各種分隔符號
    public void characters(char[] ch, int start, int length) throws SAXException {
    //instantiates s, indents output, prints character values in element
    String s = new String(ch, start, length);
    if (!s.startsWith("\n")) //空的value不打印
    System.out.println(getIndent()+ " Value: " + s);
    }

    // 處理文檔尾
    public void endDocument() throws SAXException {
    idx -= INDENT;
    System.out.println(getIndent() + "end document");

    System.out.println("...PARSING ends");
    }

    // 處理標記尾
    public void endElement(String uri, String localName, String qName) throws SAXException {
    idx -= INDENT;
    }

    // 處理文檔的起始點
    public void startDocument() throws SAXException {
    idx += INDENT;
    System.out.println("PARSING begins...");
    System.out.println(getIndent() + "start document: ");
    }

    // 處理標記頭
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    idx += INDENT;
    System.out.println('\n' + getIndent() + "start element: " + qName);

    }

    private String getIndent() {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < idx; i++)
    sb.append(" ");
    return sb.toString();
    }

    }


    總結,雖然解析xml數據很復雜,因為涉及了很多的遞歸算法,但是我們可以使用業界比較成熟的解析API來進行xml數據處理。我現在只是給出了一個非常 簡單的例子,但是在真實系統中遠比這個要復雜的多,大家以后在使用的使用會發現還是有很多的工作要做的。
    posted on 2010-03-17 17:37 小菜毛毛 閱讀(3800) 評論(2)  編輯  收藏 所屬分類: XML

    Feedback

    #  SAX 的屬性問題 [未登錄] 2012-06-04 15:07 木木
    如果 要是<XmlComponents> 有個屬性值 怎么丟過去 我用了 if(屬性值.getlength()!=0) 怎么說呢 現在遇到的問題我要按 一個屬性id 查找一個元素 比如吧<XmlComponents id="01"><name></name>
    <age></age> </XmlComponents>
    XmlComponents id="02"><name></name>
    <age></age> </XmlComponents>   回復  更多評論
      

    # re: SAX解析XML例子[未登錄] 2013-12-13 10:44 dd
    jgjgjg  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲不卡无码av中文字幕| 国产极品美女高潮抽搐免费网站| 在线观看AV片永久免费| 国产hs免费高清在线观看| 妞干网手机免费视频| 亚洲天堂免费在线视频| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 大地资源网高清在线观看免费| 4虎永免费最新永久免费地址| 国产成人免费高清激情明星| 午夜免费1000部| 亚洲阿v天堂在线2017免费| 亚洲小视频在线播放| 欧洲美女大片免费播放器视频| 成人嫩草影院免费观看| 久久精品免费一区二区| 韩国免费一级成人毛片| 久久激情亚洲精品无码?V| 亚洲1234区乱码| 国产日韩AV免费无码一区二区 | 亚洲卡一卡2卡三卡4麻豆| 一级毛片a女人刺激视频免费| 成人免费福利视频| 色窝窝免费一区二区三区| 好男人视频社区精品免费| 亚洲AV日韩精品一区二区三区 | 亚洲影视自拍揄拍愉拍| 亚洲AV无码一区二区一二区| 久久aa毛片免费播放嗯啊| 亚洲av日韩片在线观看| 亚洲一卡2卡3卡4卡乱码 在线| 久久水蜜桃亚洲AV无码精品| 一级毛片aa高清免费观看| 成人黄页网站免费观看大全| 亚洲av中文无码乱人伦在线咪咕 | 色婷婷六月亚洲综合香蕉| 一边摸一边桶一边脱免费视频| 中文字幕影片免费在线观看| 亚洲av无码精品网站| 一级毛片免费播放男男| 亚洲免费在线视频观看|