用Digester實現xml轉換成bean

    項目中要用到解析配置文件的功能,google了一下,發現基本都是說用Digester的,正好工程中有這個jar包,所以可以用,研究了一下。Digester原來是struts1.x下面的jar,但由於解析xml到bean是個如此常用的功能,於是就分出來了,成爲apache一個單獨的項目了,它用純java實現。試了一下,解析xml還是挺方便的。下面是我改寫了官網提供的一個例子,基本覆蓋常用的功能。

 

example.xml:

 

 

beans:

 

 

 

 

 

 

 

 

測試類:

 

 

簡單說明一下,

1)當創建bean中的bean屬性時,如AddressBook的Person對象,總是需要兩步:

addObjectCreate

addSetNext

前者是告訴系統下面的元素會映射成一個對象,後者告訴系統用當前父對象的哪個方法將這個新的子對象添加進來,不能以addCallMethod代替,如果用了,會發現多個元素時,只有一個被添加了進去,原因我也不知道,文檔講得也不清楚.

 

2)讀取attribute

   兩種辦法,一種是addSetProperties(),它會用xml中的attribute來設置bean上同名的property,如果兩者名字不同怎麼辦,如例中xml裏是birth,而bean中叫birthDay,用第二種辦法addSetProperties("address-book/person","birth","birthDay");

 

3)將元素文本設置給bean的property

   我一般比較喜歡用addBeanPropertySetter,用addCallMethod也可以,不過要指定參數的個數,如果只有一個參數,那麼個數用0表示,a little weird。

 

   另外,addSetNestedProperties這個方法可以將一組元素按鈕元素名設置給bean的property,如:

 

 用addSetNestedProperties("address-book/person/address"),它會把這些子元素都作爲property設置給address。

 

 如果想給bean設置一個常量的屬性,addCallMethod之後用addObjectParam即可。Digester一點兒也難,多動手練習就會明白。

 

 是不是很簡單?瞭解了原理,當xml結構變化時,可以簡單地修改下代碼就同步了,另外有種辦法貌似是用xmlbeans,用annotation實現的,在一個項目中見過,不過沒研究過。

 

官方例子:

http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/examples/

 

需要的其它jar包,commons-logging,BeanUtils

如果想使用日誌,定義個commons-logging.properties文件,附上以下內容:

 org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
  org.apache.commons.logging.simplelog.log.org.apache.commons.digester.Digester=debug
  org.apache.commons.logging.simplelog.log.org.apache.commons.digester.Digester.sax=info

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章