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

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

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

    Let's go inside

    this blog is deprecated as a result of laziness.
    posts - 59, comments - 2, trackbacks - 0, articles - 0

    實戰-Digester的基本使用

    Posted on 2006-07-18 12:20 Earth 閱讀(342) 評論(0)  編輯  收藏 所屬分類: Java

    這里是在Eclipse下的展開圖:
    TestDigester.jpg?
    下載源代碼download

    今天初學了一下Digester,并把它在Eclipse下跑了一遍,呵呵。學會開始用ant來構建任務了。發現如同JBuilder一樣也可以直接在TestDigester上使用Alt+Shift+X來運行main函數,不錯。
    網上的例子只有一個大致的皮毛,我把這個foo ,bar的例子實際實現了一遍(后來發現Digester src包中給我們提供了幾個更好的例子,不錯)。使用Digester的步驟大致如下:

    ???????? // 首先要new一個Digester對象
    ????????Digester?digester? = ? new ?Digester();
    ????????
    ????????
    // ?不進行XML與相應的DTD的合法性驗證
    ????????digester.setValidating( false );
    ????????
    ????????
    // ?當遇到<foo>時創建一個test.Foo對象,并將其放在棧頂
    ????????digester.addObjectCreate( " foo " ,? " test.Foo " );
    ????????
    ????????
    // ?根據<foo>元素的屬性(這里是name),對剛創建的Foo對象的屬性(這里也是name)進行設置
    ????????
    // ?注:xml中的屬性稱為attribute,對象中的屬性稱為property
    ????????digester.addSetProperties( " foo " );

    ????????
    // 當遇到<foo>的子元素<bar>時創建一個test.Bar對象,并將其放在棧頂。
    ????????digester.addObjectCreate( " foo/bar " ,? " test.Bar " );
    ????????
    ????????
    // 根據<bar>元素的屬性,對剛創建的Bar對象的屬性進行設置,這里有兩個:分別是id和title
    ????????digester.addSetProperties( " foo/bar " );
    ????????
    ????????
    // 當再次遇到<foo>的子元素<bar>時創建一個test.Bar對象,并將其放在棧頂,同時調用第二棧頂元素(Foo對象)的addBar方法。?
    ????????digester.addSetNext( " foo/bar " ,? " addBar " ,? " test.Bar " );

    ????????ClassLoader?classLoader?
    = ?Thread.currentThread()
    ????????????????.getContextClassLoader();
    ????????InputStream?in?
    = ?classLoader.getResourceAsStream( " Foobar.xml " );
    ????????Foo?foo?
    = ? null ;
    ????????
    try ? {
    ????????????
    if ?(in? != ? null )? {
    ????????????????foo?
    = ?(Foo)?digester.parse(in); // 分析結束后,返回根元素。
    ????????????}

    ????????}
    ? catch ?(IOException?e)? {
    ????????????e.printStackTrace();
    ????????}
    ? catch ?(SAXException?e)? {
    ????????????e.printStackTrace();
    ????????}

    元素匹配模式
     Digester能自動遍歷目標XML文檔的元素形成的層次結構,這個過程無須程序員參與。程序員的任務是,決定在解析的過程中,當由嵌套的元素形成的一個特定序列被識別出時如何進行處理。用以描述這種序列的機制,這就叫元素匹配模式。
     當檢索的元素序列滿足某個匹配模式時,與該模式相對應的行為就會被自動執行。
     對于元素模式,具體來說,就是元素和子元素間,通過“/”分隔并連接在一起,對于根元素之前則無需使用“/”。例如:
    <a> -- 匹配模板 "a"
     <b> -- 匹配模板 "a/b"
      <c/> -- 匹配模板 "a/b/c"
      <c/> -- 匹配模板 "a/b/c"
     </b>
     <b> -- 匹配模板 "a/b"
      <c/> -- 匹配模板 "a/b/c"
      <c/> -- 匹配模板 "a/b/c"
      <c/> -- 匹配模板 "a/b/c"
     </b>
    </a>
    字符”*”表示任意級別,如”*/a”表示任意級別的<a>都可匹配(不包括根元素級的).
    處理規則
    元素匹配模式用于確定什么時候進行處理,而處理規則則用于定義處理的內容,也就是進行什么樣的行動。
    Digester定義了一系列的常用的處理規則。在設置Digester時,可能通過調用addRule()方法來注冊一個特定的元素匹配模式以及一個相應的處理規則類的實例。
     用戶也可以自定義一些自己的處理規則類,用于滿足不同類型的特殊需求。定義一個處理規則首先要擴展org.apache.commons.digester.Rule類。然后再根據特殊的要求來實現begin(), body(), end(), finish()事件處理方法。

    對于一些標準的規則類,可以創建它們的實例,并調用digester.addRule來注冊它們。由于經常使用它們,所以digester定義了一些簡便的方法來注冊它們。如:
    Rule rule = new SetNextRule(digester, "addChild","com.mycompany.mypackage.MyChildClass");
    digester.addRule("a/b/c", rule);
    可以用下列代碼替換
    digester.addSetNext("a/b/c", "addChild", "com.mycompany.mypackage.MyChildClass");

    在前面的foo, bar例子中,從log4j打印出的信息可以窺見它所用到的處理規則
    ? New match='foo'
    [ObjectCreateRule]{foo}New test.Foo
    [SetPropertiesRule]{foo} Setting property 'name' to 'The Parent'

    ? New match='foo/bar'
    [ObjectCreateRule]{foo/bar}New test.Bar
    [SetPropertiesRule]{foo/bar} Setting property 'id' to '123'
    [SetPropertiesRule]{foo/bar} Setting property 'title' to 'The First Child'
    [SetNextRule]{foo/bar} Call test.Foo.addBar(test.Bar@30c221[id=123,title=The First Child])

    主站蜘蛛池模板: 99热亚洲色精品国产88| 亚洲经典在线中文字幕| 一级毛片免费观看不卡的| 亚洲人成无码久久电影网站| 小说区亚洲自拍另类| 四虎影在线永久免费观看| 日日摸日日碰夜夜爽亚洲| 国产国产人免费视频成69大陆| 国产91成人精品亚洲精品| 免费人成网站在线播放| yellow视频免费看| 亚洲精品亚洲人成在线观看| 无码成A毛片免费| 亚洲人成网站18禁止久久影院| 免费精品国偷自产在线在线| 亚洲午夜精品久久久久久app| 在线观看亚洲免费视频| 日本一区二区三区在线视频观看免费 | 日本阿v免费费视频完整版| 亚洲乱码在线观看| 日产乱码一卡二卡三免费| 免费人成网上在线观看| 日本亚洲欧洲免费天堂午夜看片女人员 | 国产麻豆免费观看91| a一级爱做片免费| 久久久久无码精品亚洲日韩| 亚洲精品视频免费看| 亚洲国产成人精品无码区二本| 国产18禁黄网站免费观看| 最近中文字幕大全免费版在线| 亚洲日本香蕉视频| 国产一区二区免费在线| 成全视频免费观看在线看| 久久亚洲国产成人影院| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 成人永久福利免费观看| 91成人免费福利网站在线| avtt天堂网手机版亚洲| 亚洲伊人成无码综合网 | 日本zzzzwww大片免费| 美女羞羞喷液视频免费|