现在的位置: 首页 > 综合 > 正文

common-digester解析xml

2013年10月29日 ⁄ 综合 ⁄ 共 2082字 ⁄ 字号 评论关闭

digester2.0+   beanutils 1.8+  logging1.1+

废话不说

<?xml version="1.0" encoding="UTF-8"?>
<menu>
    <root title="website">
        <node title="qq" url="www.qq.com"></node>
        <node title="163" url="www.163.com"></node>
    </root>
</menu>

Menu -> root -> node

package com.taobao.digester;

import java.util.ArrayList;
import java.util.List;

public class Menu {
    private List<Root> roots;

    public Menu(){
    	roots = new ArrayList<Root>();
    }
  
	public void addRoot(Root root) {
		roots.add(root);
	}
    
	@Override
	public String toString() {
		return "Menu:<" +roots+ ">";
	}
}

package com.taobao.digester;

import java.util.ArrayList;
import java.util.List;

public class Root {
    private String title;
    private List<Node> nodes;
    
    public Root(){
    	nodes = new ArrayList<Node>();
    }

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
    
	public void addNode(Node node){
		nodes.add(node);
	}
	
	@Override
	public String toString() {
		return "Root:<"+nodes+">, "+title;
	}
}

node
package com.taobao.digester;

public class Node {
	private String title;
	private String url;

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
    @Override
    public String toString() {
    	return "Node: title="+title+", url:"+url;
    }
}


test:

package com.taobao.digester;

import java.io.File;
import java.io.IOException;

import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;

public class Test {
     
     public static void main(String[] args) throws IOException, SAXException {
         Digester digester = new Digester();
         digester.setValidating(false);
         digester.addObjectCreate("menu", com.taobao.digester.Menu.class);
         digester.addObjectCreate("menu/root", com.taobao.digester.Root.class);
         digester.addSetProperties("menu/root", "title", "title");
         digester.addSetNext("menu/root", "addRoot");  //addSetNext方法很重要 决定了加入上层的方法 
                                                       //还要注意的一点是这个方法在上层的menu中
         
         digester.addObjectCreate("menu/root/node", com.taobao.digester.Node.class);
         digester.addSetProperties("menu/root/node", "title", "title");  //menu/root/node 有两个属性 所有加两次 
         digester.addSetProperties("menu/root/node", "url", "url");
         digester.addSetNext("menu/root/node", "addNode");
         Menu menu = (Menu)digester.parse(new File("e:/NewFile.xml"));
         System.out.println(menu);
	 }
}

OK

抱歉!评论已关闭.