1、bill.xml内容
<?xml version="1.0" encoding="GBK"?>
<document>
<bill>
<serialNo>20089220014</serialNo> <!-- 流水号 -->
<termNo>N0795</termNo> <!-- 机器号 -->
<saleId>62</saleId> <!-- 售货单位备案登记编码 -->
<saleName>发源</saleName> <!-- 售货单位 -->
<buyId>74</buyId> <!-- 购货单位备案登记编码 -->
<buyName>基由</buyName> <!-- 购货单位 -->
<totalWeight>40</totalWeight> <!-- 合计重量(公斤) -->
<totalMoney>220</totalMoney> <!-- 合计金额(元)-->
<saleDate>2008-8-18 00:00:00</saleDate> <!-- 交易时间 -->
<status>0</status> <!-- 是否作废 -1:作废 0/'':正常 -->
<billItem>
<variety>五花肉</variety> <!-- 品 种 -->
<weight>10</weight> <!-- 重量(公斤) -->
<price>5</price> <!-- 单价(元/公斤) -->
<total>50</total> <!-- 金 额(元) -->
</billItem>
<billItem>
<variety>纯瘦肉</variety> <!-- 品 种 -->
<weight>10</weight> <!-- 重量(公斤) -->
<price>6</price> <!-- 单价(元/公斤) -->
<total>60</total> <!-- 金 额(元) -->
</billItem>
<billItem>
<variety>猪蹄</variety> <!-- 品 种 -->
<weight>10</weight> <!-- 重量(公斤) -->
<price>5</price> <!-- 单价(元/公斤) -->
<total>50</total> <!-- 金 额(元) -->
</billItem>
<billItem>
<variety>猪耳朵</variety> <!-- 品 种 -->
<weight>10</weight> <!-- 重量(公斤) -->
<price>6</price> <!-- 单价(元/公斤) -->
<total>60</total> <!-- 金 额(元) -->
</billItem>
</bill>
</document>
2、解析xml 的类
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import org.apache.commons.digester.Digester;
import com.data.bill.entity.Bill;
import com.data.bill.entity.BillItem;
import com.util.DateHelper;
public class BillDigest {
private Bill bill;
public Bill getBill() {
return bill;
}
private void initBill() {
if (bill == null) {
bill = new Bill();
}
}
public void addBill(
String serialNo,
String termNo,
String saleId,
String saleName,
String buyId,
String buyName,
String totalWeight,
String totalMoney,
String saleDate,
String status) {
initBill();
bill.setSerialNo(stringToEmpty(serialNo));
bill.setTermNo(stringToEmpty(termNo));
bill.setSaleId(integerToEmpty(saleId));
bill.setSaleName(stringToEmpty(saleName));
bill.setBuyId(integerToEmpty(buyId));
bill.setBuyName(stringToEmpty(buyName));
bill.setTotalWeight(doubleToEmpty(totalWeight));
bill.setTotalMoney(doubleToEmpty(totalMoney));
bill.setSaleDate(DateHelper.parseDate(saleDate));
bill.setStatus(integerToEmpty(status));
}
public void addBillItem(
String variety,
String weight,
String price,
String total){
initBill();
BillItem item = new BillItem();
item.setVariety(stringToEmpty(variety));
item.setWeight(doubleToEmpty(weight));
item.setPrice(doubleToEmpty(price));
item.setTotal(doubleToEmpty(total));
item.setHeader(bill);
bill.getItems().add(item);
}
public static Bill getBill(File xmlFile) {
BufferedReader reader = null;
Bill bill = null;
String s;
StringBuffer buffer = new StringBuffer();
try {
reader = new BufferedReader(new FileReader(xmlFile));
while((s = reader.readLine()) != null) {
buffer.append(s);
}
bill = getBill(buffer.toString());
reader.close();
} catch (Exception e) {
e.printStackTrace();
bill = null;
}
return bill;
}
public static Bill getBill(InputStream is) {
if (is == null) {
return null;
}
BufferedReader reader = null;
Bill bill = null;
String s;
StringBuffer buffer = new StringBuffer();
try {
reader = new BufferedReader(new InputStreamReader(is));
while ((s = reader.readLine()) != null) {
buffer.append(s);
}
bill = getBill(buffer.toString());
reader.close();
} catch (Exception e) {
e.printStackTrace();
bill = null;
}
return bill;
}
public static Bill getBill(String xml) {
///StringBuffer buffer = new StringBuffer(xml);
/*Pattern p = Pattern.compile("<[^>]*?>");
Matcher m = p.matcher(buffer);
while(m.find()) {
buffer.replace(m.start(), m.end(), xml.substring(m.start(),m.end()).toLowerCase());
}*/
String parseXML = xml;
Bill bill = null;
BillDigest helper;
//生成一个digester。主要需要引进commons-logging.jar、commons-collections.jar、commons-beanutils.jar
Digester digester = new Digester();
//设置对XML文档资料不进行DTD(Document type definition)验证
digester.setValidating(false);
//当遇见 document 元素的时候,产生一个BillDigest对象
digester.addObjectCreate("document", BillDigest.class);
//当遇见 document/bill 元素的时候,使用addBill方法进行赋值,有10个参数
digester.addCallMethod("document/bill", "addBill", 10);
//当遇见 document/bill/* 元素的时候,作为参数
digester.addCallParam("document/bill/serialNo", 0);
digester.addCallParam("document/bill/termNo", 1);
digester.addCallParam("document/bill/saleId", 2);
digester.addCallParam("document/bill/saleName", 3);
digester.addCallParam("document/bill/buyId", 4);
digester.addCallParam("document/bill/buyName", 5);
digester.addCallParam("document/bill/totalWeight", 6);
digester.addCallParam("document/bill/totalMoney", 7);
digester.addCallParam("document/bill/saleDate", 8);
digester.addCallParam("document/bill/status", 9);
//当遇见 document/bill/billItem 元素的时候,使用addBillItem方法进行赋值,有4个参数
digester.addCallMethod("document/bill/billItem", "addBillItem", 4);
//当遇见 document/bill/billItem/* 元素的时候,作为参数
digester.addCallParam("document/bill/billItem/variety", 0);
digester.addCallParam("document/bill/billItem/weight", 1);
digester.addCallParam("document/bill/billItem/price", 2);
digester.addCallParam("document/bill/billItem/total", 3);
try {
//用digester解析指定的文件
helper = (BillDigest)digester.parse(new StringReader(parseXML));
bill = helper.getBill();
}catch (Exception e) {
e.printStackTrace();
bill = null;
}
return bill;
}
public static String stringToEmpty(String obj)
{
if(obj==null){
return "";
}else{
return obj;
}
}
public static Integer integerToEmpty(String obj)
{
if(obj==null){
return new Integer(0);
}else{
return Integer.valueOf(obj);
}
}
public static Double doubleToEmpty(String obj)
{
if(obj==null){
return new Double(0);
}else{
return Double.valueOf(obj);
}
}
}
总结:通过调用
public static Bill getBill(File xmlFile) 、public static Bill getBill(InputStream is) 、public static Bill getBill(String xml) ,传入不同的参数,返回Bill对象。
分享到:
相关推荐
### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 Digester是Apache Jakarta项目下的一个工具类库,它简化了基于SAX(Simple API for XML)的XML解析过程。Digester能够根据定义好的规则自动将...
标题“利用commons-digester解析XML”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache ...
本文将深入探讨如何使用Digester解析XML文件,以及在实际项目中如何应用。 首先,让我们了解什么是Apache Commons Digester。这是一个Java库,它的主要功能是读取XML文件,并基于一系列预先定义的规则(Rule),...
在使用 Digester 进行 XML 解析时,我们需要进行以下步骤: 1. **引入 Digester 库**:在 Java 项目中,首先需要引入 Apache Commons Digester 库。通常通过 Maven 或 Gradle 管理依赖,Maven 可添加如下依赖: ``...
学习这个实例,你不仅能够掌握如何使用Digester解析XML,还能了解到如何设计符合XML结构的Java类,以及如何定义和组织规则。这将对你的Java开发技能和处理XML数据的能力有显著提升。同时,理解Digester也能帮助你更...
要使用Digester解析XML文档,首先需要创建一个 `org.apache.commons.digester.Digester` 类的实例,并配置必要的模式和规则,最后调用 `parse()` 方法。 以下是一个简单的示例代码: ```java import org.apache....
**使用Digester解析XML并验证** 1. **设置 Digester 规则** 在使用Digester之前,我们需要定义一系列规则,告诉Digester在遇到XML文档的哪些元素时执行什么操作。这些规则通常涉及到创建新对象、设置对象属性或者...
在Java开发中,XML(eXtensible Markup Language)是一种常用的数据交换格式,用于存储和传输数据。...这个“digester解析xml必备包”提供了一整套解决方案,方便开发者在项目中快速集成和使用XML解析功能。
《使用Digester解析XML的深度指南》 在Java开发中,处理XML文件是常见的任务,而Apache Commons Digester库提供了一种高效且便捷的方式来解析XML并将其映射到Java对象。本教程将深入探讨如何使用Digester来读取XML...
这个“org.apache.commons.digester解析XML.rar”压缩包包含了一个测试工程,它演示了如何使用Digester库来解析XML文件并映射到Java对象上。下面将详细介绍这个库的功能、使用方法以及在实际开发中的应用。 1. **...
总结一下,使用Apache Digester解析XML的优点在于它的灵活性和自动化。你可以根据XML结构自定义消化规则,让解析过程变得简单高效。此外,由于它是开源的,开发者可以查看源码,了解其工作原理,甚至扩展其功能。在...
5. **解析XML**:最后,使用配置好的 Digester 对象解析XML文件: ```java Root root = null; try (InputStream is = new FileInputStream("path_to_xml_file.xml")) { root = digester.parse(is); } catch ...
在Java开发中,Struts框架提供了一个强大的工具——Digester,用于解析XML文件并自动创建、配置Java对象。本文将详细介绍如何使用Digester处理具有嵌套结构的XML文档,并通过一个具体的实例——"DigesterXmlTest"来...
在示例代码中, DigesterDriver演示了如何配置 Digester来解析XML文件,创建`Catalog`对象并填充其`Book`和`Magazine`子对象,以及相关的`Article`对象。每个元素的属性通过`addBeanPropertySetter()`设置,而对象...
3. **解析XML**:使用 Digester 的 `parse()` 方法读取XML文件,根据预先定义的规则进行处理。 4. **结果处理**:最后,Digester会生成一个对象模型,代表了XML文档的内容。 以下是一个简单的 Digester 使用示例: ...
以下是一个简单的示例,展示了如何使用Digester解析XML: ```java package mypackage; public class Foo { // ... (Foo类的属性和方法) } public class Bar { // ... (Bar类的属性和方法) } // XML文档片段: ...
本篇文章将详细介绍如何使用`Digester`解析XML,以及在使用过程中需要的依赖库。 首先,`Digester`的核心功能是通过定义规则来将XML元素与Java对象的属性或方法关联,这样在解析XML时,可以自动创建和填充Java对象...