Digester入門

官方文檔:http://commons.apache.org/digester/guide/core.html

測試小程序:

package com.zizhu;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.commons.digester3.Digester;
import org.apache.commons.digester3.ObjectCreateRule;
import org.apache.commons.digester3.Rule;
import org.apache.commons.digester3.SetNextRule;
import org.apache.commons.digester3.SetPropertiesRule;
import org.xml.sax.SAXException;

import com.zizhu.model.Child;
import com.zizhu.model.Parent;
import com.zizhu.model.ServletBean;
import com.zizhu.model.ValueWrap;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		InputStream is = Client.class.getClassLoader().getResourceAsStream("user.xml");
		
		//parse user.xml
		Digester dig1 = new Digester();
		
		//創建對象
		Rule parent = new ObjectCreateRule("com.zizhu.model.Parent");
		Rule child = new ObjectCreateRule("com.zizhu.model.Child");
		
		//設置屬性
		Rule parentProp = new SetPropertiesRule();
		Rule childProp = new SetPropertiesRule();
		
		//建立父子關係
		Rule relation = new SetNextRule("addChildren");
		
		dig1.addRule("parent", parent);
		dig1.addRule("parent", parentProp);
		
		dig1.addRule("parent/child", child);
		dig1.addRule("parent/child", childProp);
		dig1.addRule("parent/child", relation);
		
		Parent p = null;
		try {
			p = dig1.parse(is);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}finally{
			try {
				is.close();
			} catch (IOException e) {
			}
		}
		
		System.out.println(p.getName());
		List<Child> children = p.getChildren();
		for(Child c : children){
			System.out.println("child : id = " + c.getId() + ", name="+
					c.getName() + ", age = " + c.getAge());
		}
		
		
		//模擬加載web.xml
		InputStream is2 = Client.class.getClassLoader().getResourceAsStream("web.xml");
		
		//parse user.xml
		Digester dig2 = new Digester();
		dig2.addObjectCreate("web-app/servlet", "com.zizhu.model.ServletBean");
		dig2.addCallMethod("web-app/servlet/servlet-name", "setServletName", 0);//0表示將內容解析爲單個參數
		dig2.addCallMethod("web-app/servlet/servlet-class", "setServletClass", 0);
		
		dig2.addCallMethod("web-app/servlet/init-param", "addInitParam", 2);//2表示接下來設置2個參數
		dig2.addCallParam("web-app/servlet/init-param/param-name", 0);
		dig2.addCallParam("web-app/servlet/init-param/param-value", 1);
		
		ServletBean servlet = null;
		try {
			 servlet = dig2.parse(is2);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}finally{
			try {
				is2.close();
			} catch (IOException e) {
			}
		}
		
		System.out.println(servlet.getServletName());
		System.out.println(servlet.getServletClass());
		List<ValueWrap> initParams = servlet.getInitParams();
		for(ValueWrap wrap : initParams){
			System.out.println("name - " + wrap.getName() + ", value - " + wrap.getValue());
		}
		
	}

}


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