3 编译schema
3.1 定义schema
<xs:schema targetNamespace="http://openuri.org/easypo"
xmlns:po="http://openuri.org/easypo"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="purchase-order">
<xs:complexType>
<xs:sequence>
<xs:element name="customer" type="po:customer"/>
<xs:element name="date" type="xs:dateTime"/>
<xs:element name="line-item" type="po:line-item" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="shipper" type="po:shipper" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="customer">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="line-item">
<xs:sequence>
<xs:element name="description" type="xs:string"/>
<xs:element name="per-unit-ounces" type="xs:decimal"/>
<xs:element name="price" type="xs:double"/>
<xs:element name="quantity" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="shipper">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="per-ounce-rate" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
3.2 schema解释
1)我们在这里定义了三种复杂类型(complex types)客户,商品列表、以及卖家。他们都是purchase-order的子元素。在schema中复杂元素通常包含子元素和属性。他的子元素被sequence包含,并且嵌套在复杂类型中。同时purchase-order又是global类型因为他们在schema的根元素下。这就意味着它可以在schema中的任何地方引用。
2)在复杂类型中使用了简单类型(simple types)如:姓名、地址、商品描述。它们都是xs:string类型,这种类型schema的内置类型,共有46种内置类型。如:xs:double 、xs:int、xs:decimal等等。
3)全局元素(global element)purchase-order,它是由多个复杂子元素构成的,注意这种复杂元素引用了在schema中定义的复杂元素。
然后你就可以用XMLBean通过这个XSD文件编译出我们所需要的jar文件。这个jar包含了根据schema产生的一系列接口。
3.3 通过这个.xsd文件编译出xmlbeans
Scomp 它是Schema Compiler的缩写,顾名思义就是schema编译器的意思。
进入命令行运行命令:
C:\xmlbeans2.2\schemas>scomp -out biz.jar biz.xsd
很不幸你十有八九会碰到这种情况
不要着这其实是XMLBeans需要制定一个额外的java 编译器。我们加上一个编译器的参数就可以了。
Ok,我们最终编译jar文件成功!
4 测试XMLBeans
4.1 工程结构
4.2 必要的Jar 包
注意不要忘记把必要的Jar加入你的工程。注意我们这里用的是easypo.jar,而不是biz.jar。这个jar的名字无所谓,只要是你刚才通过scomp编译出来的jar就可以了。你可以自己定义jar的名字。
[img]http://yangyang.iteye.com/upload/picture/pic/6447/1452634c-1e79-48c9-8bca-2d2a8a122e6c.bmp [/img]
4.3 测试代码
我们来写一个类来测试一下easypo.jar:
package xmlbeans.test;
import java.io.File;
import org.openuri.easypo.LineItem;
import org.openuri.easypo.PurchaseOrderDocument;
import org.openuri.easypo.PurchaseOrderDocument.PurchaseOrder;
public class POHandler
{
public static void printItems(File po) throws Exception
{
/*
* All XMLBeans schema types provide a nested Factory class you can
* use to bind XML to the type, or to create new instances of the type.
* Note that a "Document" type such as this one is an XMLBeans
* construct for representing a global element. It provides a way
* for you to get and set the contents of the entire element.
*
* Also, note that the parse method will only succeed if the
* XML you're parsing appears to conform to the schema.
*/
PurchaseOrderDocument poDoc =
PurchaseOrderDocument.Factory.parse(po);
/*
* The PurchaseOrder type represents the purchase-order element's
* complex type.
*/
PurchaseOrder po1 = poDoc.getPurchaseOrder();
/*
* When an element may occur more than once as a child element,
* the schema compiler will generate methods that refer to an
* array of that element. The line-item element is defined with
* a maxOccurs attribute value of "unbounded", meaning that
* it may occur as many times in an instance document as needed.
* So there are methods such as getLineItemArray and setLineItemArray.
*/
LineItem[] lineitems = po1.getLineItemArray();
System.out.println("Purchase order has " + lineitems.length + " line items.");
double totalAmount = 0.0;
int numberOfItems = 0;
/*
* Loop through the line-item elements, using generated accessors to
* get values for child elements such a description, quantity, and
* price.
*/
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);
}
public static void main(String args[]){
try {
POHandler.printItems(new File("xml/order.xml"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Order.xml文件内容:
<purchase-order xmlns="http://openuri.org/easypo">
<customer>
<name>Gladys Kravitz</name>
<address>Anytown, PA</address>
</customer>
<date>2003-01-07T14:16:00-05:00</date>
<line-item>
<description>Burnham's Celestial Handbook, Vol 1</description>
<per-unit-ounces>5</per-unit-ounces>
<price>21.79</price>
<quantity>2</quantity>
</line-item>
<line-item>
<description>Burnham's Celestial Handbook, Vol 2</description>
<per-unit-ounces>5</per-unit-ounces>
<price>19.89</price>
<quantity>2</quantity>
</line-item>
<shipper>
<name>ZipShip</name>
<per-ounce-rate>0.74</per-ounce-rate>
</shipper>
</purchase-order>
运行后得到结果:
That’s all ! 下面一张我们会进一步讨论XMlBeans的使用。
5 几个XMLBeans 使用的例子
5.1 验证xml 数据
XMLBeans 是根据编译时的schema 来验证xml 数据的。
public static boolean validate( File file){
PurchaseOrderDocument myDoc = null;
try {
myDoc = PurchaseOrderDocument.Factory.parse(file);
} catch (XmlException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// Set up the validation error listener.
ArrayList validationErrors = new ArrayList();
XmlOptions validationOptions = new XmlOptions();
validationOptions.setErrorListener(validationErrors);
// Do some editing to myDoc.
// During validation, errors are added to the ArrayList for
// retrieval and printing by the printErrors method.
boolean isValid = myDoc.validate(validationOptions);
// Print the errors if the XML is invalid.
if (!isValid)
{
Iterator iter = validationErrors.iterator();
while (iter.hasNext())
{
System.out.println(">> " + iter.next() + "\n");
}
}
return isValid;
}
注:file是一个xml数据文件。
5.2 读取xml数据
使用XMLBeans来将xml 数据包装成对象,并且通过对象读取信息。
public static void printItems(File file) throws Exception
{
PurchaseOrderDocument poDoc =
PurchaseOrderDocument.Factory.parse(file);
PurchaseOrder po1 = poDoc.getPurchaseOrder();
LineItem[] lineitems = po1.getLineItemArray();
Customer c = po1.getCustomer();
c.getAddress();
c.getAge();
System.out.println("Purchase order has " + lineitems.length + " line items.");
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());
}
}
注:file是一个xml数据文件。
5.3 创建xml 数据
创建新的xml数据并保存到xml文件中。
public static void createPO()
{
PurchaseOrderDocument newPODoc = PurchaseOrderDocument.Factory.newInstance();
PurchaseOrder newPO = newPODoc.addNewPurchaseOrder();
Customer newCustomer = newPO.addNewCustomer();
newCustomer.setName("Doris Kravitz");
newCustomer.setAddress("Bellflower, CA");
newPODoc .save( new File("xml/newOrder.xml") );
}
除了这些基本的功能以外,XMLBeans还提供了xpath查询,指定位置插入删除xml数据元素等强大功能,值得我们深入研究。
分享到:
相关推荐
赠送jar包:xmlbeans-3.1.0.jar; 赠送原API文档:xmlbeans-3.1.0-javadoc.jar; 赠送源代码:xmlbeans-3.1.0-sources.jar; 赠送Maven依赖信息文件:xmlbeans-3.1.0.pom; 包含翻译后的API文档:xmlbeans-3.1.0-...
赠送jar包:xmlbeans-5.0.3.jar; 赠送原API文档:xmlbeans-5.0.3-javadoc.jar; 赠送源代码:xmlbeans-5.0.3-sources.jar; 赠送Maven依赖信息文件:xmlbeans-5.0.3.pom; 包含翻译后的API文档:xmlbeans-5.0.3-...
因为它避免了整个XML树在内存中的创建,而是按需加载和处理数据。 4. **查询和操作**:XMLBeans提供了丰富的API,可以直接对XML数据进行操作,如查找、修改、添加和删除元素。这些操作基于Java API,对于熟悉Java的...
赠送jar包:xmlbeans-5.0.3.jar; 赠送原API文档:xmlbeans-5.0.3-javadoc.jar; 赠送源代码:xmlbeans-5.0.3-sources.jar; 赠送Maven依赖信息文件:xmlbeans-5.0.3.pom; 包含翻译后的API文档:xmlbeans-5.0.3-...
10. **应用场景**:XMLBeans常用于需要高效、类型安全处理XML数据的Java应用,如Web服务客户端、企业级应用、数据交换和XML数据存储等。 11. **与其他技术的对比**:XMLBeans与JAXB、DOM、SAX、StAX等其他XML处理...
总结来说,“xmlbeans-bin-3.1.0.zip”是XMLBeans的一个二进制发行版,提供了基于XML Schema的Java对象映射,适用于需要高效处理XML数据的Java应用程序。通过这个压缩包,开发者可以快速集成XMLBeans到他们的项目中...
赠送jar包:xmlbeans-3.1.0.jar; 赠送原API文档:xmlbeans-3.1.0-javadoc.jar; 赠送源代码:xmlbeans-3.1.0-sources.jar; 赠送Maven依赖信息文件:xmlbeans-3.1.0.pom; 包含翻译后的API文档:xmlbeans-3.1.0-...
xml-apis现在,为了方便大家学校Java,我现在上传一系列Java包,这些都是大家经常用到的,放心下载。这一系列材料,大家可以上我的资源库下载。
在实际项目中,结合使用源码分析工具和XmlBeans,可以帮助我们更好地理解和调试XML处理代码,提高开发效率。尽管有一些现代的库,如JAXB和Jackson,提供类似的XML绑定功能,但XmlBeans的独特特性和性能使其在某些...
在"xmlbeans-2.5.0"版本中,提供了对XML数据的强大支持和高效处理。 1. **XMLBeans的基本概念** - **XML Schema到Java绑定**:XMLBeans通过解析XML Schema文件,生成对应的Java类,这些类可以直接用于XML数据的...
通过阅读源码、查看API文档和示例,可以学习如何使用XMLBeans来处理XML数据,进行序列化和反序列化,以及如何利用其高级特性如XPath查询和流处理。同时,如果你需要自定义XMLBeans的行为或者修复某些问题,源代码将...
xmlbeans-3.1.0.jar包 XMLBeans是一种工具,可让您以Java友好的方式访问XML 的全部功能。 解决 java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException异常
标题中的 "xmlbeans-2.3.0.jar" 是该项目的一个特定版本,它包含了 XMLBeans 库的所有必要组件,用于支持 XML 处理。 在描述中提到的问题,"POI 操作2007格式的Excel报错问题:java.lang.ClassNotFoundException: ...
xmlbeans-bin-3.0.1-20180824案例及jar包,里面包含案例和resolver.jar、xbean.jar、xbean_xpath.jar、xmlpublic.jar,jar包在lib文件中。
xmlbeans-3.0.1.jar是一个用于处理XML文档的Java库,它提供了强大的XML数据绑定和解析功能,使开发者能够更轻松地在Java应用中操作和处理XML数据。 【使用人群】 适用于Java开发者、数据处理专家和需要在Java应用中...
这个压缩包“xmlbeans-bin-3.1.0.tgz”包含了XMLBeans库的3.1.0版本,提供了Java应用程序处理XML数据的强大工具。 首先,我们来看一下包含的三个关键文件: 1. `xmlbeans-3.1.0.jar`:这是XMLBeans的核心运行时库...
xmlbeans-3.1.0.rar是一个工具类,主要作用是把xml文件转换成jar包,方便使用。解压出来以后,到jar目录,里面有对应的bat文件,只需要把对应的配置改成自己需要生成的xml文件,xsd文件即可
【标题】:“maven+svn+XMLBeans+xml”这一主题主要涵盖了使用Maven构建工具、Subversion(SVN)版本控制系统以及XMLBeans库来处理XML数据的实践过程。在这个项目中,目标是创建一个能够读取XML数据的Java JAR库,并...
XMLBeans是一个XML-Java绑定工具,利用它可以很方便地解析XML文档。 使用 XMLBeans 可以将 Java™ 编程语言与 XML 结合使用。Java 编程语言是一种面向对象的语言,它基于开放的、公开的标准,可移植、健壮而且可靠...