今天有空再度學習Struts1.3.9的源碼,感覺對org.apache.commons.digester.Digester的認識還很少,上網看了一篇文章講的比較好,特此轉載!
文章出處:http://www.onjava.com/pub/a/onjava/2002/10/23/digester.html?page=1
文章中的案例解釋:
//產生一個digester。主要需要引進commons-logging.jar、commons-collections.jar、commons-beanutils.jar
Digester digester = new Digester();
//設定對XML文檔資料是否進行DTD驗證
digester.setValidating( false );
//當遇見 catalog 元素的時候,產生一個Catalog對象
digester.addObjectCreate( "catalog", Catalog.class );
//當遇見 catalog 元素下面的book的時候,產生一個Book對象
digester.addObjectCreate( "catalog/book", Book.class );
// 當遇見 catalog 元素下面的book的author時候,調用author屬性的Set方法
digester.addBeanPropertySetter( "catalog/book/author", "author" );
digester.addBeanPropertySetter( "catalog/book/title", "title" );
//當再一次遇見 catalog 元素下面的book的時候,調用catalog類的addBook()方法
digester.addSetNext( "catalog/book", "addBook" );
digester.addObjectCreate( "catalog/magazine", Magazine.class );
digester.addBeanPropertySetter( "catalog/magazine/name", "name" );
digester.addObjectCreate( "catalog/magazine/article", Article.class );
//addSetProperties()是將對應元素的屬性賦值。
digester.addSetProperties( "catalog/magazine/article", "page", "page" );
digester.addBeanPropertySetter( "catalog/magazine/article/headline" );
digester.addSetNext( "catalog/magazine/article", "addArticle" );
digester.addSetNext( "catalog/magazine", "addMagazine" );
//"F://Digester//catalog.xml"為XML文檔
File input = new File( "F://Digester//catalog.xml" );
Catalog c = (Catalog)digester.parse( input );
System.out.println( c.toString() );