使用Digester解析XML
07-06-19 22:49Update
本文对怎么样使用Digester解析XML做了比较深入和透彻的说明。
什么是Digester?
Digester是Jakarta-Commons项目提供的可以简单绑定XML到JavaBean的工具。特点:
1, 可以以JAVA对象的形式来表现XML形式,比较直观。往往被绑定的JAVA对象的构造跟XML文件的构造可以完全一样。2, 只能从XML到JavaBean的单方面绑定。反过来,不能把JavaBean的数据保存回XML。常用做XML解析。这有点不同于JAXB,Castor,Relaxer等双向绑定工具。
3, XML的节点以及属性名,可以不必等同于JAVA类的类名,属性名,比较灵活。
4, 绑定规则可以自由定制,也可XML化。
从范例学习Digester
比如有如下XML,怎么绑定到JAVA类呢?
Order.xml<orders> <order seq="0001" date="2007-06-12"> <customer name="C1" /> <goods> <item id="01" name="book" /> <item id="02" name="CD" /> </goods> </order> <order seq="0002" date="2007-06-12"> <customer name="C2" /> <goods> <item id="05" name="Note" /> <item id="06" name="Pen" /> </goods> </order> </orders>
说明:
orders:订单集合
order:一宗订单
order.seq:流水号
order.date:日期
customer:顾客
customer.name:顾客名
goods:所有商品集合
item:一件商品
item.id:商品id
item.name:商品名
一般情况下,从对象的角度来看,我们可以把上述XML描述成:
Java Class
| 标签 | 类名(属性列表) | 说明 |
|---|---|---|
| <orders> | Orders (List<Order> orderList) | 订单集合Orders包含0到多个订单Order 对象,用List集合orderList 来表示 |
| <order> | Order (seq, date, customer, goods) | 每个Order有流水线seq,日期date,一个顾客,多件商品等属性 |
| <customer> | Customer (name) | 顾客Customer有姓名name属性 |
| <goods> | Goods (List<Item>itemList) | 商品集合Goods包含多件商品Item |
| <item> | Item(id, name) | 商品有id,名称name等属性 |
根据以上分析,我们分别为order.xml创建以下java类。
Orders.java
Order.java
Customer.java
Goods.java
Item.java
上面的分析已经比较详细,java类的内容就不列出来了。
接第2页
- Relative Articles
- XML Schema完全解说 - 入门篇 - (08-01-26 18:25)
- 用JAXB存取XML数据 - (07-06-20 23:07)