XMLBeans使用指南

XMLBeans试图为Java语言提供一种简单的方式访问和操作XML数据。其特点是:在保留XML数据特点的情况下提供了类似Java类结构的访问方式。

操作XML的API通常将XML文件分拆以实现对各节点的操作。而XMLBeans则把XML文档本身作为一个整体处理,对应一个对象。而该对象则由XML文件的schema(XSD文件)生成,通过类似JavaBean的get和set方式访问具体的数据。而且XMLBeans支持所有的XML Schema定义。

其他处理XML的方式包括程序接口(DOM或者SAX)或者XML marshalling/binding工具(JAXB)。但前者没有针对schema的类型,DOM等需要理解全部对象模型,而且繁琐。JAXB提供对所有XML schema的支持,但仅仅实现了一部分,XMLBeans支持所有XML schema。而且由于XML保存在内存中,XMLBeans可以减少marshalling和demarshalling的负荷。

开始首先要说明的时XSD文件,也就是schema定义。XSD文件是XML文件需要遵守的规则,包括节点、类型等定义。XSD提供了丰富的数据类型表示复杂的结构。例如:XSD可以控制数据的排序或者对某些数据做限制(出生日期在1900后)。

通过编译XSD文件得到一系列Java接口,用以访问遵守该XSD规则的XML文档。具体实现方式下面叙述。

要使用XMLBeans操作XML,必须要有XSD和XML文件。可以先定义XSD,根据XSD生成相应的XML,也可以先写出XML,再生成相应的XSD,通过xmlspy可以实现这两个过程。一般使用XMLBeans就是为了获取XML文档中的数据,所以,我们首先定义一个XML文件,如下所示:

            Gladys Kravitz        Anytown, PA        2003-01-07T14:16:00-05:00            Burnham's Celestial Handbook, Vol1        5        21.79        2                Burnham's Celestial Handbook, Vol2        5        19.89        2            ZipShip        0.74    
生成的XSD文件如下所示:

                                                                                                                                                                                                                                                                                        
使用scomp命令由XSD文件生成JAR包,在classpath中引入该JAR包,就可以对上述XML文件操作了。如下面代码:

package docs.xmlbeans;import java.io.File;import org.apache.xmlbeans.*;import org.openuri.easypo.PurchaseOrderDocument;import org.openuri.easypo.PurchaseOrder;import org.openuri.easypo.LineItem;public class POHandler{    public static void printItems(File po) throws Exception    {        PurchaseOrderDocument poDoc =            PurchaseOrderDocument.Factory.parse(po);        PurchaseOrder po = poDoc.getPurchaseOrder();        LineItem[] lineitems = po.getLineItemArray();        System.out.println("Purchase order has " + lineitems.length + " line items.");        double totalAmount = 0.0;        int numberOfItems = 0;        for (int j = 0; j < lineitems.length; j++)        {            System.out.println(" Line item: " + 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();            totalAmount += lineitems[j].getPrice() * lineitems[j].getQuantity();        }        System.out.println("Total items: " + numberOfItems);        System.out.println("Total amount: " + totalAmount);    }}
运行结果为:

Purchase order has 3 line items.Line item 0   Description: Burnham's Celestial Handbook, Vol 1   Quantity: 2   Price: 21.79Line item 1   Description: Burnham's Celestial Handbook, Vol 2   Quantity: 2   Price: 19.89Total items: 4Total amount: 41.68

[/align][align=center]

你可能感兴趣的:(apache,数据结构,xml,J#)