`
wanbin021614
  • 浏览: 27655 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用XMLBeans处理XML数据和文档入门

阅读更多
XMLBeans是Bea公司的一个项目,用于访问和处理数据和文档。使用XMLBeans可以让您用面向对象的观点来对待和处理xml数据和文档,同时又可以忠实于该xml数据对应的xml结构和schema。本文中作者简单的介绍了XMLBeans,并且给出了一个简单的例子,详细的演示了如何配置XMLBeans使它正常运行的全部过程。 XMLBeans来自于Bea,是使用java技术访问和处理XML数据和文档技术的一次突破性进展。第一次,开发者可以用自己熟悉的、方便的、面向对象的视图来看待XML数据,同时又可以访问该数据对应的结构和schema。 ――来自于Bea的关于XMLBeans的介绍

XMLBeansBea公司针对XML处理的一个项目,现在已经提供免费下载和使用,目前的最新版本是1.0

1 为什么使用XMLBeans

XMLBeans之前,我们访问xml数据和文档有两种选择:

1. 使用DOMSAX来访问XML数据和文档的内容

2. 使用JAXB等技术将XML映射为java

不管你使用哪一种,你都无法完整的访问该XML数据和对象的丰富内容和Schema信息。产生的原因是因为java数据模型和XML之间不匹配造成的,所以应用中你要不就选择了可扩展性,要不就只能选择系统的强壮性。

随着XMLBeans的出现,我们不需要再采取这种折衷的措施了。XMLBeans提供了更多的特性来访问XML数据和文档:

1. XMLBeans是基于标记流,因此可以轻松的使用指针在xml数据和文档之间导航。指针接口适用于所有xml数据和文档。

2. 如果你的xml数据和文档有一个schema的话,XMLBeans将给您生成这些XML数据和文档的java类“视图”(也就是访问这些XML数据和文档的java代码)。

3. 开发者可以使用这些java代码轻松的读/写xml数据和文档,而且被强制的执行xml schema中规定的一些约束。

4. java类“视图”都能够忠实的表述原始xml数据和文档的内容,因为java类“视图”都是基于受保护的、最基本的xml表现。

所以使用XMLBeans来访问xml 数据和文档的好处是显而易见的:

1. 完全使用面向对象的观点来看待和处理数据和文档

2. 开发者不再需要编写大量的代码来访问XML数据和文档

3. 可以使用schema中规定的对于数据的约束条件,而不需要自己去编写实现这些约束的代码

4. 不需要解析所有的xml数据和文档而仅仅是为了访问其中的某个数据项

关于XMLBeans更详细的情况请大家访问http://dev2dev.bea.com/technologies/xmlbeans/

2 环境和工具准备

XMLBeans中的大量工作使用了Ant工具,所以再开始工作之前请下载Ant工具并使它正常运行。

XMLBeansjava实现请大家到bea的网站上下载:http://dev2dev.bea.com/technologies/xmlbeans/index.jsp

在执行过程中,还需要用访问xmldom组件,也就是xml-apis.jar文件,可到http://xml.apache.org/xerces2-j/index.html下载。附件中的test-XMLBeans.rar文件中也有这个jar文件。

3 第一个例子

3.1 实例说明

我们这里使用一个订单的例子,他的实例文档如下:schema来描述这个实例文档:

<po:purchase-orderxmlns:po="http://vivianj.go.nease.net/easypo">
<po:customer>
<po:name>GladysKravitz</po:name>
<po:address>Anytown,PA</po:address>
</po:customer>
<po:date>2003-01-07T14:16:00-05:00</po:date>
<po:line-item>
<po:description>Burnham'sCelestialHandbook,Vol1</po:description>
<po:per-unit-ounces>5</po:per-unit-ounces>
<po:price>21.79</po:price>
<po:quantity>2</po:quantity>
</po:line-item>
<po:line-item>
<po:description>Burnham'sCelestialHandbook,Vol2</po:description>
<po:per-unit-ounces>5</po:per-unit-ounces>
<po:price>19.89</po:price>
<po:quantity>2</po:quantity>
</po:line-item>
<po:shipper>
<po:name>ZipShip</po:name>
<po:per-ounce-rate>0.74</po:per-ounce-rate>
</po:shipper>
</po:purchase-order>

我们使用下面的

xml数据已经确定了,而且已经用schema来描述他了,剩下的就是使用XMLBeans来辅助生成访问XML数据的java代码了,下面的章节将详细的介绍这部分内容

<xs:schema

xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:po
="http://vivianj.go.nease.net/easypo"

targetNamespace
="http://vivianj.go.nease.net/easypo"

elementFormDefault
="qualified">

<xs:elementname="purchase-order">

<xs:complexType>

<xs:sequence>

<xs:elementname="customer"type="po:customer"/>

<xs:elementname="date"type="xs:dateTime"/>

<xs:elementname="line-item"type="po:line-item"minOccurs="0"maxOccurs="unbounded"/>

<xs:elementname="shipper"type="po:shipper"minOccurs="0"maxOccurs="1"/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:complexTypename="customer">

<xs:sequence>

<xs:elementname="name"type="xs:string"/>

<xs:elementname="address"type="xs:string"/>

</xs:sequence>

<xs:attributename="age"type="xs:int"/>

</xs:complexType>

<xs:complexTypename="line-item">

<xs:sequence>

<xs:elementname="description"type="xs:string"/>

<xs:elementname="per-unit-ounces"type="xs:decimal"/>

<xs:elementname="price"type="xs:decimal"/>

<xs:elementname="quantity"type="xs:integer"/>

</xs:sequence>

</xs:complexType>

<xs:complexTypename="shipper">

<xs:sequence>

<xs:elementname="name"type="xs:string"/>

<xs:elementname="per-ounce-rate"type="xs:decimal"/>

</xs:sequence>

</xs:complexType>

</xs:schema>

现在,要访问的

3.2 ant辅助生成访问XML数据的java代码

3.2.1 外部jar文件

在使用XMLBeans生成访问XML数据的java代码时,我们需要用到xbean.jar文件,下载的XMLBeans里面有这个文件。

3.2.2 增加的taskdef

编译脚本执行时候必须增加一个XMLBeantaskdef,内容如下:

<taskdef name="xmlbean" classname="com.bea.xbean.tool.XMLBean" classpath="path/to/xbean.jar"/>

3.2.3 xmlbean

使用xmlbean标签来生成访问xml数据的java代码,简单的例子如下:

schemas下面所有的*.xsd文件生成访问代码,将所有的代码编译好后放入Schemas.jar文件中。

<xmlbeanschema="schemas"destfile="Schemas.jar"/>

<xmlbeanschema="schemas/easypo.xsd"destfile="Schemas.jar"srcgendir=".">

第一个例子表示为

第二个例子表示为schemas下面所有的easypo.xsd文件生成访问代码,将所有的代码编译好后放入Schemas.jar文件中,而且将生成的。Java文件放在当前目录下。

其中的参数简单的说明如下:

xmlbean 标签表示这是要生成指定schema文件的访问代码。

Schema 属性表示要生成访问代码的xsd文件的范围,可以是一个目录,也可以

是一个文件或者使用fileset进行定义。

Destfile 属性定义了被生成的代码编译后将放在那个文件中。

Rcgendir 属性则表示生成的。Java文件将放在那个目录中。

Xmlbean标签支持的其它参数和相关的说明请参考XMLBeans的帮助文档,这里不作过多的说明。

3.2.4 实际的build.xml

生成jar文件

<projectname="MyProject"default="compile"basedir=".">

<propertyname="src"value="."/>

<propertyname="build"value="build"/>

<propertyname="dist"value="dist"/>

<propertyname="classpath"value="./xkit/lib/xbean.jar"/>

<targetname="init">

<!--Createthebuilddirectorystructureusedbycompile-->

<mkdirdir="${build}"/>

</target>

<targetname="compile"depends="init">

<!--Compilethejavacodefrom${src}into${build}-->

<taskdefname="xmlbean"classname="com.bea.xbean.tool.XMLBean"classpath="${classpath}"/>

<xmlbeanschema="schemas/easypo.xsd"classpath="${classpath}"destfile="easypo.jar"srcgendir="${src}"/>

</target>

</project>

3.2.5

现在你可以进入build.xml文件所在的目录,执行ant f build.xml来生成所有访问该easypo.xml的代码。

执行完以后,这个目录下面会多出一个Schemas.jar文件,他包含了所有被生成和编译了的、访问xml文档的.class文件。目录下面会多出一个net目录,他的子目录下包含了所有被生成的.java文件.实际的jar文件构成请大家参考作者提供的Schemas.jar文件.

4 测试一下

4.1 测试代码

好了,现在我们来写个例子,测试一下是否可以成功的访问xml数据.完整的代码请参看

测试结果

//解析xml实例文档,他的参数poFile是一个file类型的参数

//所以需要我们将3.1的实例文档保存为一个.xml文档

PurchaseOrderDocumentpoDoc
=

PurchaseOrderDocument.Factory.parse(poFile);

//创建一个访问该xml实例文档的接口PurchaseOrder

/***//**[注]让作者感到很意外的是,bea提供的例子代码中这段的定义是这样的:

*PurchaseOrderpo=poDoc.getPurchaseOrder();

*也就是说PurchaseOrder这个接口应该是一个单独的类,但是作者查看XMLBeans

*最后生成的.java文件中,这个PurchaseOrder却是作为PurchaseOrderDocument的一

*个内部类出现的

*/


PurchaseOrderDocument.PurchaseOrderpo
=poDoc.getPurchaseOrder();

//直接过去其中的所有lineitem子元素的所有内容,他返回一个lineitem对象的数组.

LineItem[]lineitems
=po.getLineItemArray();

System.out.println(
"Purchaseorderhas"+lineitems.length+"lineitems.");

doubletotalAmount=0.0;

intnumberOfItems=0;

//直接使用对应的get方法来获取对应属性的值

for(intj=0;j<lineitems.length;j++)

...{

System.out.println(
"Lineitem:"+j);

System.out.println(

"Description:"+lineitems[j].getDescription());

System.out.println(
"Quantity:"+lineitems[j].getQuantity());

System.out.println(
"Price:"+lineitems[j].getPrice());

numberOfItems
+=lineitems[j].getQuantity().intValue();

totalAmount
+=lineitems[j].getPrice().doubleValue()*lineitems[j].getQuantity().doubleValue();

}


System.out.println(
"Totalitems:"+numberOfItems);

System.out.println(
"Totalamount:"+totalAmount);

4.2

运行这段代码,应该在控制台打印如下信息:

Purchase order has 3 line items.

Line item 0

Description: Burnham's Celestial Handbook, Vol 1

Quantity: 2

Price: 21.79

Line item 1

Description: Burnham's Celestial Handbook, Vol 2

Quantity: 2

Price: 19.89

Total items: 4

Total amount: 41.68

5 总结

XMLBeansBea公司的一个公开源代码项目,以Schema为基础建立的、访问xml的一种解决方法,提供了访问和处理xml数据和文档时既可以完全的访问xml的内容、又不丢失xmlschema信息的强大功能。使用XMLBeans可以让您用面向对象的观点来对待和处理xml数据和文档,同时又可以忠实于该xml数据对应的xml结构和schema

本文中作者简单的介绍了XMLBeans,并且给出了一个简单的例子,详细的演示了如何配置XMLBeans,如何使用他的ant扩展辅助生成访问xmljava代码,如何编写客户端来测试该段代码是否成功执行的全过程。希望能够让大家掌握如何使用XMLBeans来简化各自的开发工作、提高自己的开发速度。XMLBeans的高级应用将在接下来的文章中介绍。

参考资料:

1. ANT的帮助 http://ant.apache.org/

2. XMLBeans的帮助 http://dev2dev.bea.com/technologies/xmlbeans/

工具下载:

1. ANT工具下载 http://archive.apache.org/dist/ant/binaries/

2. XMLBeans下载 http://dev2dev.bea.com/technologies/xmlbeans/

作者的所有工作文件: test-XMLBeans.rar

作者信息:

姓名: 肖菁

联系方式: 0731-6665772,jing.xiao@chinacreator.com

分享到:
评论

相关推荐

    XmlBeans学习

    “教你用XmlBeans处理XML文档”可能包含了一些具体的示例代码,指导读者如何使用XmlBeans来读取、修改和保存XML文档。这包括了创建XMLDocument对象,访问和修改元素、属性,以及如何在保持XML文档格式不变的情况下...

    xmlbean入门实例

    XMLBean是Apache软件基金会开发的一款Java库,它允许开发者直接在Java对象和XML文档之间进行映射,大大简化了XML数据的处理。本实例将带你走进XMLBean的世界,通过实践来学习其基本用法和核心概念。 XMLBean的入门...

    XML轻松学习手册

    XML的基本结构包括元素、属性、文本内容、注释和处理指令。元素是XML文档的核心,它是以尖括号包围的标签,如`&lt;element&gt;`。元素可以包含其他元素、文本或属性。属性用来提供关于元素的附加信息,例如`...

    AXIS2 入门文档

    - **JiBX**:另一种XML数据绑定框架,同样支持现有类,并使用灵活的映射定义文件来实现数据对象与XML之间的转换。 #### 四、AXIS2 配置说明 - **axis2.xml**:全局配置文件,用于配置整个系统。 - **Parameter**:...

    poi相关架包

    2. **XMLBeans**:这是一个Java库,用于处理XML文档。在Apache POI中,XMLBeans用于解析和生成Excel的XML格式(XSSF和XWPF)。它提供了强大的XML数据绑定功能,使得与XML文档交互更加简单。 3. **Apache Commons IO...

    CXF入门.rar

    通常,CXF允许你通过JAXB或XMLBeans等工具将Java对象自动绑定到XML消息,但在处理复杂数据结构时,需要正确地配置数据绑定和序列化设置。 【CXF - 江南白衣博物馆 - SpringSide Wiki】可能是一个关于CXF在...

    JAVA中的POI操作EXCEL,包含了POI用的几个JAR包 和学习源代码

    5. `dom4j-1.6.1.jar`:DOM4J是一个Java库,用于处理XML文档,虽然POI自身使用了XMLBeans,但有时可能也需要DOM4J来辅助处理XML结构。 有了这些库,我们可以开始编写Java代码来操作Excel。以下是一些基本操作: - ...

    xfire+spring+webservice入门例子

    XFire通过JAXB(Java Architecture for XML Binding)和XMLBeans来处理XML序列化,支持SOAP 1.1和1.2,以及WS-I Basic Profile 1.1。它还提供了一种简单的API,使得开发者可以快速地创建和部署Web服务。 二、Spring...

    CXF 入门视频教程及例子程序的使用方法

    - 支持多种传输协议(HTTP、HTTPS、JMS等)和数据绑定(如XMLBeans、JAXB、Castor等)。 **二、视频教程内容** - **1. 使用CXF实现简单的HelloWorld.swf** 这个视频教程会展示如何使用CXF创建一个基本的SOAP服务...

    cxf入门例子

    6. **WSDL与UDDI**:对于SOAP服务,CXF会自动生成Web服务定义语言(WSDL),这是描述服务接口和操作的XML文档。此外,如果你的环境包含统一描述、发现和集成(UDDI)服务器,CXF还可以帮助你在其中注册你的服务,...

    Spring.3.x企业应用开发实战(完整版).part2

    15.6.2 编写控制器和文件上传表单页面 15.7 杂项 15.7.1 静态资源处理 15.7.2 装配拦截器 15.7.3 异常处理 15.8 小结 第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2...

    Spring3.x企业应用开发实战(完整版) part1

    15.6.2 编写控制器和文件上传表单页面 15.7 杂项 15.7.1 静态资源处理 15.7.2 装配拦截器 15.7.3 异常处理 15.8 小结 第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2...

    axis2 webservice入门手册(JS,Java,PHP调用实例源码)www.sietoo.com出品

    - **选择性**:Axis2 提供了多种数据绑定方式,包括直接使用 AXIOM、简单的数据绑定方法、以及使用 XMLBeans、JiBX 或 JAXB 2.0 等高级框架进行绑定。 - **灵活性**:这种多样性使得开发者可以根据具体需求选择最...

    dozer(PDF)

    为了确保XML配置文件的有效性和一致性,Dozer提供了一个DTD文件用于验证映射文件。 **2.12 支持** Dozer项目组提供了一系列的支持服务,包括论坛和技术支持等。 - **支持论坛**:开发者可以通过官方论坛寻求帮助...

    Spring oxm入门实例

    OXM 的主要目的是将 Java 对象转换为 XML 文档,以便于数据交换和存储。 Spring OXM 提供了一个统一的接口来实现 OXM 功能,使得开发者可以轻松地将 Java 对象与 XML 文档进行转换。 Spring OXM 的主要特点包括: ...

    Apache-cxf-2.1

    JAXB允许Java对象和XML文档之间进行自动转换,而XMLBeans则提供了一种面向Java对象的方式来操作XML。在2.1版本中,这些数据绑定技术可能已经被进一步优化,提高了性能和灵活性。 Apache CXF还包括了一个强大的WS-I...

    apache-cxf-3.0.6-src.tar

    例如,它支持JAXB(Java Architecture for XML Binding)和XMLBeans。 4. **安全特性**:CXF集成了多种安全机制,包括基本认证、WS-Security、OAuth2等,确保Web服务的安全通信。 5. **模块化设计**:Apache CXF的...

    WebService技术手册 CXF&XFire

    - **WebService教程-xfire学习手册【技术文档】.pdf**:这本书籍详细介绍了XFire的使用方法,包括基本概念、快速入门、高级特性和实例应用,对于理解XFire的运作机制和开发实践非常有帮助。 - **CXF实用手册.pdf**:...

Global site tag (gtag.js) - Google Analytics