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

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

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

    隨筆-17  評論-64  文章-79  trackbacks-1
    假設有下列xml文件:
    <?xml version='1.0' encoding='utf-8'?>
    <address-book>
        
    <contact myType="individual">
            
    <name>Zane Pasolini</name>
            
    <address>999 W. Prince St.</address>
            
    <city>New York</city>
            
    <province>NY</province>
            
    <postalcode>10013</postalcode>
            
    <country>USA</country>
            
    <telephone>1-212-345-6789</telephone>
        
    </contact>
        
    <contact myType="business">
            
    <name>SAMOFIX d.o.o.</name>
            
    <address>Ilica 47-2</address>
            
    <city>Zagreb</city>
            
    <province></province>
            
    <postalcode>10000</postalcode>
            
    <country from="cn">Croatia</country>
            
    <telephone>385-1-123-4567</telephone>
        
    </contact>
    </address-book>

    這是一份常用到的文件,現在我們需要將之映射到java bean,用Digester解析顯得非常簡單
    public class AddressBookParser
    {
        
    /**
         * Prints the contact information to standard output.
         *
         * 
    @param contact the <code>Contact</code> to print out
         
    */
        
    public void addContact(Contact contact)
        {
            System.out.println(
    "TYPE: " + contact.getType());
            System.out.println(
    "NAME: " + contact.getName());
            System.out.println(
    "    ADDRESS:    " + contact.getAddress());
            System.out.println(
    "    CITY:       " + contact.getCity());
            System.out.println(
    "    PROVINCE:   " + contact.getProvince());
            System.out.println(
    "    POSTALCODE: " + contact.getPostalcode());
            System.out.println(
    "    COUNTRY:    " + contact.getCountry());
            System.out.println(
    "    COUNTRY-From:    " + contact.getCountryFrom());
            System.out.println(
    "    TELEPHONE:  " + contact.getTelephone());
        }

        
    /**
         * Configures Digester rules and actions, parses the XML file specified
         * as the first argument.
         *
         * 
    @param args command line arguments
         
    */
        
    public static void main(String[] args) throws IOException, SAXException
        {
            
    // instantiate Digester and disable XML validation
            Digester digester = new Digester();
            digester.setValidating(
    false);

            
    // instantiate AddressBookParser class
            digester.addObjectCreate("address-book", AddressBookParser.class );
            
    // instantiate Contact class
            digester.addObjectCreate("address-book/contact", Contact.class );

            
    // set type property of Contact instance when 'type' attribute is found
            
    //對有屬性的值通過setProperties方法

            digester.addSetProperties(
    "address-book/contact",         "myType""type" );

            
    // set different properties of Contact instance using specified methods
            
    //addCallMethod與addBeanPropertySetter等價
            
    // 參數 0代表一個參數,默認就是當前讀的數據

            digester.addCallMethod(
    "address-book/contact/name",       "setName"0);
            digester.addCallMethod(
    "address-book/contact/address",    "setAddress"0);
            digester.addCallMethod(
    "address-book/contact/address",    "setAddress",0);
            digester.addCallMethod(
    "address-book/contact/city",       "setCity"0);
            digester.addCallMethod(
    "address-book/contact/province",   "setProvince"0);
            digester.addCallMethod(
    "address-book/contact/postalcode""setPostalcode"0);
            digester.addCallMethod(
    "address-book/contact/country",    "setCountry"0);



            
    //增加country的屬性 : from
            digester.addSetProperties("address-book/contact/country","from","countryFrom");
            digester.addCallMethod(
    "address-book/contact/telephone",  "setTelephone"0);

            
    // call 'addContact' method when the next 'address-book/contact' pattern is seen
            digester.addSetNext("address-book/contact",               "addContact" );

            
    // now that rules and actions are configured, start the parsing process
            AddressBookParser abp = (AddressBookParser) digester.parse(new File("c:\\addressbook.xml"));
        }

        
    /**
         * JavaBean class that holds properties of each Contact entry.
         * It is important that this class be public and static, in order for
         * Digester to be able to instantiate it.
         
    */
        
    public static class Contact
        {
            
    private String type;
            
    private String name;
            
    private String address;
            
    private String city;
            
    private String province;
            
    private String postalcode;
            
    private String country;
            //增加一個country的屬性: from
            private String countryFrom;
            private String telephone;

            
    public void setType(String newType)
            {
                type 
    = newType;
            }
            
    public String getType()
            {
                
    return type;
            }

            
    public void setName(String newName)
            {
                name 
    = newName;
            }
            
    public String getName()
            {
                
    return name;
            }

            
    public void setAddress(String newAddress)
            {
                address 
    = newAddress;
            }
            
    public String getAddress()
            {
                
    return address;
            }

            
    public void setCity(String newCity)
            {
                city 
    = newCity;
            }
            
    public String getCity()
            {
                
    return city;
            }

            
    public void setProvince(String newProvince)
            {
                province 
    = newProvince;
            }
            
    public String getProvince()
            {
                
    return province;
            }

            
    public void setPostalcode(String newPostalcode)
            {
                postalcode 
    = newPostalcode;
            }
            
    public String getPostalcode()
            {
                
    return postalcode;
            }

            
    public void setCountry(String newCountry)
            {
                country 
    = newCountry;
            }
            
    public String getCountry()
            {
                
    return country;
            }

            
    public void setTelephone(String newTelephone)
            {
                telephone 
    = newTelephone;
            }
            
    public String getTelephone()
            {
                
    return telephone;
            }

            
    public String getCountryFrom() {
                
    return countryFrom;
            }

            
    public void setCountryFrom(String countryFrom) {
                
    this.countryFrom = countryFrom;
            }
        }
    }


    AjaxChat 中的讀取房間信息的方式顯得更簡潔
    房間的xml配置文件如下:
    <rooms>
      
    <room id="1" name="General Topics" />
      
    <room id="2" name="Programming" />
      
    <room id="3" name="Movies" />
      
    <room id="4" name="Music" />
      
    <room id="5" name="Television" />
    </rooms>

    解析代碼如下 :
    public synchronized void init(InputStream isConfigFile) {

            log.debug(
    "init()");
            
    if (isConfigFile != null) {
                
    // Read in rooms config and create beans, hand off to DAO.
                Digester digester = new Digester();
                digester.setValidating(
    false);
                digester.push(
    this);
                digester.addObjectCreate(
    "rooms/room",
                        
    "org.apache.struts.apps.ajaxchat.dto.RoomDTO");
                //注意這里,如果xl的屬性名稱和bean的屬性名稱完全對應,則直接提供xml的位置即可
                digester.addSetProperties(
    "rooms/room");
                digester.addSetNext(
    "rooms/room""addRoom");
                
    try {
                    digester.parse(isConfigFile);
                    log.info(
    "***** Rooms = " + rooms);
                } 
    catch (IOException ioe) {
                    ioe.printStackTrace();
                } 
    catch (SAXException se) {
                    se.printStackTrace();
                }
            }

        } 
    // End init().

    如果在xml文件中增加非attribute則更改后的配置文件如下:

    <rooms>
      
    <room id="1" name="General Topics" />
      
    <room id="2" name="Programming" />
      
    <room id="3" name="Movies" />
      
    <room id="4" name="Music" />
      
    <room id="5" name="Television" />
      
    <room>
        
    <id>6</id>
        
    <name>shit</name>
      
    </room>
      
    <room>
        
    <id>7</id>
        
    <name>haha</name>
      
    </room>
    </rooms>
    對應的解析如下:
    public synchronized void init(InputStream isConfigFile) {

            log.debug(
    "init()");
            
    if (isConfigFile != null) {
                
    // Read in rooms config and create beans, hand off to DAO.
                Digester digester = new Digester();
                digester.setValidating(
    false);
                digester.push(
    this);
                digester.addObjectCreate(
    "rooms/room",
                        
    "org.apache.struts.apps.ajaxchat.dto.RoomDTO");
                digester.addSetProperties(
    "rooms/room");
                //增加addCallMethod方法
                digester.addCallMethod(
    "rooms/room/id","setId",0);
                digester.addCallMethod(
    "rooms/room/name","setName",0);
                digester.addSetNext(
    "rooms/room""addRoom");
                
    try {
                    digester.parse(isConfigFile);
                    log.info(
    "***** Rooms = " + rooms);
                } 
    catch (IOException ioe) {
                    ioe.printStackTrace();
                } 
    catch (SAXException se) {
                    se.printStackTrace();
                }
            }

        } 
    // End init().
    posted on 2007-09-12 21:13 飛鳥 閱讀(306) 評論(0)  編輯  收藏 所屬分類: FLEX
    主站蜘蛛池模板: 久久亚洲精品国产精品婷婷| 毛片免费观看的视频| 黄页免费视频播放在线播放| 亚洲乱码在线卡一卡二卡新区| 无遮挡免费一区二区三区| 精品国产亚洲第一区二区三区| 亚洲第一成年网站视频| 亚洲高清毛片一区二区| 国产自国产自愉自愉免费24区| 中国性猛交xxxxx免费看| 亚洲精品偷拍视频免费观看| 中文字幕视频免费在线观看| 免费看污成人午夜网站| 两性刺激生活片免费视频| 久久久久久亚洲精品不卡| 精品亚洲成α人无码成α在线观看| 亚洲精品中文字幕无乱码| 亚洲激情黄色小说| 国产成人精品免费视频大全| 成人免费视频网址| 久久久久亚洲AV无码专区首JN| 亚洲av无码一区二区三区观看| 亚洲中文字幕乱码一区| 老司机午夜在线视频免费| 国产乱码免费卡1卡二卡3卡| 午夜神器成在线人成在线人免费| 四虎影视www四虎免费| 亚洲日本va午夜中文字幕一区| 亚洲美女精品视频| 中文在线免费视频| 日日夜夜精品免费视频| 亚洲一级特黄大片在线观看| 亚洲va久久久噜噜噜久久狠狠| 亚洲精品在线播放| 三年片免费观看大全国语| 免费国产a国产片高清| 在线亚洲97se亚洲综合在线 | 国产亚洲精品资源在线26u| 亚洲男人的天堂在线播放| 羞羞漫画在线成人漫画阅读免费| 97在线线免费观看视频在线观看|