<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 小菜毛毛 閱讀(3799) 評論(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  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 国产精品高清视亚洲精品| 国产∨亚洲V天堂无码久久久| 亚洲色图黄色小说| 99久久免费精品视频| 亚洲男同帅GAY片在线观看| 中文字幕a∨在线乱码免费看 | 精品国产免费观看久久久| 亚洲精品天堂在线观看| 成人免费午夜视频| 欧洲亚洲国产精华液| 亚洲 另类 无码 在线| jizz免费一区二区三区| 亚洲国产婷婷六月丁香| 99re6热视频精品免费观看| 亚洲无限乱码一二三四区| 成人毛片18岁女人毛片免费看| 亚洲日本一线产区和二线产区对比| 日韩成人在线免费视频| 日韩在线视频免费| 亚洲日韩精品无码一区二区三区| 久久青青草原国产精品免费| 亚洲毛片在线免费观看| 在线免费观看污网站| 一级毛片免费在线播放| 亚洲日本中文字幕| 免费被黄网站在观看| 久久成人18免费网站| 亚洲黄色在线网站| 国产免费久久精品久久久| 精品一区二区三区高清免费观看 | 亚洲综合一区二区精品导航| 黄页网站在线看免费| 日本黄页网址在线看免费不卡| 亚洲成AV人片在线观看无码| 69式国产真人免费视频| 色www免费视频| 日韩精品一区二区亚洲AV观看| 处破痛哭A√18成年片免费| 一区二区三区免费电影| 亚洲福利视频网址| 亚洲精品动漫人成3d在线 |