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