Digester解析XML文件的三种方式(javabean存储,map和list存储,xml规则配置)
1.作用及依赖jar包
首先明白Digester是干什么的?它是apache开源项目Commons中的一个子项目,用于解析XML文档的工具。Digester底层采用的是SAX解析方式,通过遍历XML文档规则来进行处理。项目中有需要将XML文件中的信息解析为我们需要的内容时(如java类),使用Digester是非常方便的。话不多说,本案例使用的jdk版本是1.6。简单的jar包依赖如下:
- commons-digester-1.8.jar
- commons-logging.jar
- commons-collections-3.2.1.jar
- commons-beanutils-1.7.0.jar
2.重点和难点
重点:理解栈的概念
难点:当使用addObjectCreate()方法时,会创建一个对象进栈,许多重要的方法都是相对于栈顶元素或次栈顶元素来进行的。如:
- addCallMethod(pattern, methodName):调用栈顶元素的指定方法
- addCallMethod(pattern, methodName, paramCount):调用栈顶元素的指定方法,可指定方法的参数个数
- addCallMethod(pattern, methodName, paramCount, paramTypes):调用栈顶元素的指定方法,可指定方法的参数个数,类型
3.XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<Orders>
<Order user="张三" date="2008-11-14" price="12279">
<goods id="1">
<name>IBM笔记本</name>
<price>8999</price>
<count>1</count>
<total_price>8999</total_price>
</goods>
<goods id="2">
<name>雅戈尔西服</name>
<price>1300</price>
<count>2</count>
<total_price>2600</total_price>
</goods>
</Order>
</Orders>
4.通过java编码方式解析(javabean存储)
根据这个xml文件的各个节点得出,我们可以创建两个javabean来存储解析信息。分别为Order.java和good.java。
订单类
package cn.com.bean;
import java.util.ArrayList;
/**
* Order.java:订单类
* @author grk
*
*/
public class Order {
private String user; //对应<Order>标签中的user属性
private String date; //对应<Order>标签中的date属性
private String price; //对应<Order>标签中的price属性
private ArrayList<Goods> goodsList = new ArrayList<Goods>();//对应<Order>标签下的所有<good>标签
//省略getter和setter...
// 添加商品到订单
public void add(Goods goods){
this.getGoodsList().add(goods);
}
// 重写toString()方法,方便于观察结果
@Override
public String toString() {
return "Order [user=" + user + ", date=" + date + ", price=" + price
+ ", goodsList=" + goodsList.toString() + "]";
}
}
商品类
package cn.com.bean;
package cn.com.bean;
/**
* Goods.java:商品类
*