使用Digester类的api进行xml解析(转贴)

<!--********* 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");

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值