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

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

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

    超哥說歡迎留言
    超哥說歡迎留言,超哥說歡迎調(diào)錯(cuò),超哥說歡迎批評(píng),超哥說歡迎指正,超哥說*&%%^$^%#$%$#@ 讀者說,你丫閉嘴!讓不讓人看了!再窮叨叨,抽你丫的!!

    commons-digester-1.7.jar

    1、功能簡述:解析xml文件;

     

    2、環(huán)境配置:所需要用到的jar包÷

      Digester的運(yùn)行依賴下列包:

    一個(gè)遵循Jaxp(1.1版本及以后)的XML解析器 xerces.jar     

    Jakarta commons beanutils包 commons-beanutils.jar (1.5版本及以后)

    Jakarta commons collections包 commons-collections-3.1.jar(2.1版本及以后)

    Jakarta commons logging包 commons-logging-1.0.4.jar(1.0.2版本及以后)
     
    一個(gè)簡單的例子  
    3、使用限制:無平臺(tái)限制(沒有測試過)


    4、是否可進(jìn)行封裝:可以進(jìn)行封裝,但我沒試過


    5、調(diào)用思路:
       讀取配置文件時(shí)使用。


    6、代碼示例:

    本代碼囊括了xml的大多數(shù)基本情況包括屬性值(如:penson的id)單一節(jié)點(diǎn)值(如:name),混合節(jié)點(diǎn)值(如:email)

     

    ***********Example.xml**********
    <address-book>
      <person id="1" category="acquaintance" try="would be ignored">
        <name>Gonzo</name>
        <email type="business">gonzo@muppets.com</email>
        <gender result="the whole tag would be ignored">male</gender>
      </person>
      <person id="2" category="rolemodel">
        <name>Kermit</name>
        <email type="business">kermit@muppets.com</email>
        <email type="home">kermie@acme.com</email>
      </person>
    </address-book>**********Person.java************
    import java.util.HashMap;
    import java.util.Iterator;
    public class Person {
      private int id;
      private String category;
      private String name;
      private HashMap emails = new HashMap();
      //下面的兩個(gè)方法的名字中set以后的部分,與<person>的屬性名字對(duì)映。當(dāng)從xml文件中識(shí)別出<person>的屬性時(shí),如果有要求(即調(diào)用過addSetProperties方法),Digester會(huì)依據(jù)這種對(duì)映關(guān)系自動(dòng)調(diào)用相應(yīng)的方法。
      public void setId(int id) {
          this.id = id;
      }
      public void setCategory(String category) {
          this.category = category;
      }
      //對(duì)name而言,因?yàn)槠渲祦碜?lt;name>標(biāo)簽的內(nèi)容而非屬性值,需要用addCallMethod指定識(shí)別<name>后的要調(diào)用此方法(想自動(dòng)調(diào)用也要可以,需要addBeanPropertySetter,參見第下一個(gè)例子)。
      public void setName(String name) {
          this.name = name;
      }
      //同name,此時(shí)還要一一指定addEmail的參數(shù)值的來源。
      public void addEmail(String type, String address) {
          emails.put(type, address);
      }
      public void print() {
          System.out.println("Person #" + id);
          System.out.println("  category=" + category);
          System.out.println("  name=" + name);
          for(Iterator i = emails.keySet().iterator(); i.hasNext(); ) {
              String type = (String) i.next();
              String address = (String) emails.get(type);
              System.out.println("  email (type " + type + ") : " + address);
          }
      }
    }
    **********AddressBook.java***********
    import java.util.LinkedList;
    import java.util.Iterator;
    public class AddressBook {
        LinkedList people = new LinkedList();
        public void addPerson(Person p) {
            people.addLast(p);
        }
        public void print() {
            System.out.println("Address book has " + people.size() + " entries");

            for(Iterator i = people.iterator(); i.hasNext(); ) {
                Person p = (Person) i.next();
                p.print();
            }
        }
    }
    ************AddressBookDigester*********
    import org.apache.commons.digester.Digester;
    /**
     * Usage: java Example1 example.xml
     */
    public class AddressBookDigester {
        public static void main(String[] args) {
            if (args.length != 1) {
                usage();
                System.exit(-1);
            }
            String filename = args[0];
            // 創(chuàng)建一個(gè)Digester實(shí)例
            Digester d = new Digester();
            // 創(chuàng)建AddressBook實(shí)例,并將其壓入棧頂。
            AddressBook book = new AddressBook();
            d.push(book);
            // 增加規(guī)則
            addRules(d);
            // 處理輸入的xml文件
            try {
                java.io.File srcfile = new java.io.File(filename);
                d.parse(srcfile);
            }
            catch(java.io.IOException ioe) {
                System.out.println("Error reading input file:" + ioe.getMessage());
                System.exit(-1);
            }
            catch(org.xml.sax.SAXException se) {
                System.out.println("Error parsing input file:" + se.getMessage());
                System.exit(-1);
            }
           
           
            // 將解析出的地址數(shù)據(jù)打印出來
            book.print();
        }
       
        private static void addRules(Digester d) {
            // 當(dāng)遇到<person>時(shí),創(chuàng)建類Person的一個(gè)實(shí)例,并將其壓入棧頂
            d.addObjectCreate("address-book/person", Person.class);
           
            // 將<person>標(biāo)簽的屬性(attribute)與棧頂Person類對(duì)象的屬性(property)設(shè)置方法根據(jù)各自的名字進(jìn)行映射,(例如,將標(biāo)簽屬性id與屬性設(shè)置方法setId進(jìn)行映射,將標(biāo)簽屬性category與屬性設(shè)置方法setCategory進(jìn)行映射),然后將屬性的值作參數(shù)傳遞給執(zhí)行相應(yīng)的方法。
            // 如果某標(biāo)簽屬性沒法通過名字找到相應(yīng)的屬性設(shè)置方法,則此標(biāo)簽屬性被忽略(如example.xml中第一個(gè)<person>的try屬性)。
            d.addSetProperties("address-book/person");

            // 調(diào)用第二棧頂對(duì)象(AddressBook實(shí)例)的addPerson方法,以棧對(duì)象(Person實(shí)例)的對(duì)象為參數(shù)
            d.addSetNext("address-book/person", "addPerson");       
           
            // 當(dāng)遇到<person>的子元素<name>時(shí),調(diào)用棧頂對(duì)象(Person實(shí)例)的setName方法。
            // 此處addCallMethod方法的第一參數(shù)是規(guī)則,第二個(gè)參數(shù)是方法的名字,第三個(gè)是參數(shù)的數(shù)量(為0時(shí),表示只有一個(gè)參數(shù),且參數(shù)的值是元素的內(nèi)容)
            d.addCallMethod("address-book/person/name", "setName", 0);
           
            // 當(dāng)遇到<person>的子元素<email>時(shí),調(diào)用棧頂對(duì)象(Person實(shí)例)的addEmail方法,addEmail方法有兩個(gè)參數(shù),取值分別來自<email>的屬性type的值和<email>本身的內(nèi)容。
            // 此處addCallParam方法的第一參數(shù)是規(guī)則,第二個(gè)參數(shù)是指明被調(diào)用方法(addEmail)參數(shù)的序號(hào),第三個(gè)是參數(shù)為字符串時(shí)指屬性的名字)
            d.addCallMethod("address-book/person/email", "addEmail", 2);
            d.addCallParam("address-book/person/email", 0, "type");
            d.addCallParam("address-book/person/email", 1);
        }

        private static void usage() {
            System.out.println("Usage: java Example1 example.xml");
        }
    }

    Address book has 2 entries
    Person #1
      category=acquaintance
      name=Gonzo
      email (type business) : gonzo@muppets.com
    Person #2
      category=rolemodel
      name=Kermit
      email (type business) : kermit@muppets.com
      email (type home) : kermie@acme.com

    posted on 2005-11-30 15:47 超人 閱讀(1734) 評(píng)論(2)  編輯  收藏
    Comments

    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
     
    主站蜘蛛池模板: 日本二区免费一片黄2019| 日韩人妻无码精品久久免费一| 毛片基地免费观看| 男女猛烈无遮掩视频免费软件| 午夜国产精品免费观看| 亚洲第一永久在线观看| 亚洲免费福利视频| 老司机亚洲精品影视www| 精品熟女少妇aⅴ免费久久| 亚洲日本乱码在线观看| 中文字幕的电影免费网站| 亚洲色偷偷综合亚洲AVYP| 嫩草在线视频www免费观看| 亚洲电影免费在线观看| 免费在线观看h片| 亚洲国产综合精品中文第一| 免费精品一区二区三区在线观看| 亚洲色成人四虎在线观看 | 成人免费网站视频www| 久久亚洲中文字幕精品一区四| 久久性生大片免费观看性| 久久综合亚洲色HEZYO社区| 特级av毛片免费观看| 国产亚洲欧洲精品| 99久久精品免费精品国产| 亚洲人成小说网站色| 亚洲国产精品成人网址天堂| 免费国产成人α片| 亚洲另类自拍丝袜第1页| 国产精品无码一区二区三区免费 | 国产美女无遮挡免费视频| 一级毛片**免费看试看20分钟| 亚洲韩国精品无码一区二区三区| 精品无码AV无码免费专区| 亚洲欧洲精品成人久久曰| 国产精品亚洲视频| 日韩免费精品视频| 9久热精品免费观看视频| 亚洲国产日韩在线成人蜜芽| 亚洲av无码成人精品区| 222www免费视频|