<!--********* foo.xml文件的内容 *************--> <foo-catgory> <foo name="foo1" count="10"> <bar id="1" title="The First Child"/> <bar id="2" title="The Second Child"/> </foo> <foo name="foo2" count="20"> <bar id="3" title="foo2 The First Child"/> <bar id="4" title="f002 The Second Child"/> </foo> </foo-catgory>
**********************class Bar ****************
package mypackage;
/**
* <p>Titleigester类的api进行xml解析的简单例子 </p>
*
* <p>Description:对应于xml中的<foo-catgory>下的<foo>下<bar>元素 </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author [email]wdz123@hotmail.com[/email]
* @version 1.0
*/
public class Bar {
private int id;
private String title;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
private void prints(String s) {
System.out.println(" " + s);
}
public void print(String s) {
prints(s + "---Bar.id=" + id + ",Bar.title=" + title);
}
}
//****** * class Foo 的代码 ************ package mypackage; import java.util.*; /** * <p>Titleigester类的api进行xml解析的简单例子 </p> * * <p>Description:对应于xml中的<foo-catgory>下的<foo>元素 </p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author [email]wdz123@hotmail.com[/email] * @version 1.0 */ public class Foo { private HashMap list; private String name; private int count; public void addBar(Bar bar) { list.put(new Integer(bar.getId()), bar); } public Bar findBar(int id) { return (Bar) (list.get(new Integer(id))); } public Iterator getBars() { return list.keySet().iterator(); } public String getName() { return name; } public int getCount() { return count; } public void setName(String n) { this.name = n; } public void setCount(int count) { this.count = count; } public Foo() { super(); list = new HashMap(); } public void print(){ Iterator i = getBars(); Bar b; int c = 0; while (i.hasNext()) { Integer ii = (Integer) i.next(); b = findBar(ii.intValue()); b.print(" Bar" + c++ +"---"); } } }
///*******************class FooCatgory 的代码 ************** package mypackage; import java.util.LinkedList; import java.util.Iterator; /** * <p>Title: Digester类的api进行xml解析的简单例子</p> * * <p>Description: :对应于xml文件中的<foo-catgory>元素 </p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author [email]wdz123@hotmail.com[/email] * @version 1.0 */ public class FooCatgory { LinkedList list = new LinkedList(); public void addFoo(Foo p) { list.addLast(p); } private void prints(String s) { System.out.println(" " + s); } public void print() { prints("FooCatgory has " + list.size() + " elements"); int c = 0; // Foo f; for (Iterator i = list.iterator(); i.hasNext(); ) { f = (Foo) i.next(); prints(" Foo" + c++ +"---" + "Foo.name=" + f.getName() + ",Foo.count=" + f.getCount()); f.print(); } } }
*********** class ParseXmlFile 的代码 ******************* package mypackage; import org.apache.commons.digester.*; /** * <p>Titleigester类的api进行xml解析的简单例子 </p> * * <p>Description: 使用Digester的api方法进行具体的解析xml文件,得到相应的java对象</p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author [email]wdz123@hotmail.com[/email] * @version 1.0 */ public class ParseXmlFile { public ParseXmlFile() { super(); } private void parse(String sFileName) { Digester d = new Digester(); //不进行XML与相应的DTD的合法性验证,如果设置=true,那应该有对应的dtd文件,并且在xml文件指出使用的dtd文件 //digester.setValidating(false); // //创建根对象 FooCatgory fooCatgory = new FooCatgory(); //根对象进入对象栈(入栈,成为栈顶元素) d.push(fooCatgory); // 当遇到<foo>时创建一个mypackage.Foo对象,并且进入对象栈(入栈,成为栈顶元素) d.addObjectCreate("foo-catgory/foo", mypackage.Foo.class); // 根据<foo>元素的属性(attribute),对刚才创建的Foo对象的属性(property)进行设置 d.addSetProperties("foo-catgory/foo"); //当再次遇到<foo>的子元素<bar>时创建一个mypackage.Bar对象,并将其放在栈顶,同时父元素(fooCatgory对象)的addFoo方法。 d.addSetNext("foo-catgory/foo", "addFoo"); // 当遇到<bar>时创建一个mypackage.Bar对象,并将其放在栈顶(入栈,成为栈顶元素) d.addObjectCreate("foo-catgory/foo/bar", mypackage.Bar.class); // 根据<bar>元素的属性(attribute),对刚创建的Bar对象的属性(property)进行设置 d.addSetProperties("foo-catgory/foo/bar"); //当再次遇到<bar>时创建一个mypackage.Bar对象,并将其放在栈顶,同时调用父元素(Foo对象)的addBar方法。 d.addSetNext("foo-catgory/foo/bar", "addBar", "mypackage.Bar"); try { //开始解析Xml-- foo.xml 该文件必须放到project根目录下,和目录src同级目录 d.parse(sFileName); } catch (java.io.IOException ioe) { System.out.println("IOException reading input file:" + ioe.getMessage()); System.exit( -1); } catch (org.xml.sax.SAXException se) { System.out.println("SAXException Error parsing input file:" + se.getMessage()); System.exit( -1); } catch (Exception ex) { System.out.println("Exception parse error!" + ex.getMessage()); } //打印xml文件解析的结果 fooCatgory.print(); } public static void main(String[] args) { ParseXmlFile p = new ParseXmlFile(); p.parse("foo.xml"); } }