1:schema文件po.xsd
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.example.com/PO" targetNamespace="http://www.example.com/PO"> <xsd:element name="purchaseOrder" type="PurchaseOrderType"/> <xsd:element name="comment" type="xsd:string"/> <xsd:complexType name="PurchaseOrderType"> <xsd:sequence> <xsd:element name="shipTo" type="USAddress"/> <xsd:element name="billTo" type="USAddress"/> <xsd:element ref="comment" minOccurs="0"/> <xsd:element name="items" type="Items"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType> <xsd:complexType name="USAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/> </xsd:complexType> <xsd:complexType name="Items"> <xsd:sequence> <xsd:element name="item" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="productName" type="xsd:string"/> <xsd:element name="price" type="xsd:decimal"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element ref="comment" minOccurs="0"/> <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/> </xsd:sequence> <xsd:attribute name="partNum" type="SKU" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction> </xsd:simpleType> </xsd:schema>
2:java代码
package com.waysoft.intergration.dao; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.apache.tuscany.sdo.api.SDOUtil; import commonj.sdo.DataObject; import commonj.sdo.helper.HelperContext; import commonj.sdo.helper.XSDHelper; public class Test1 { /** * @param args */ public static void main(String[] args) { try { // create HelperContext HelperContext scope = SDOUtil.createHelperContext(); // load .xsd document loadTypesFromXMLSchemaFile(scope, Test1.class.getResource("/").getPath().substring(1)+"po.xsd"); // create DataObject DataObject po = scope.getDataFactory().create("http://www.example.com/PO","PurchaseOrderType"); // 设置属性值 po.setString("orderDate", "2010-07-07"); DataObject shipTo = po.createDataObject("shipTo"); // 设置属性值 shipTo.setString("country", "中国"); // 设置简易子元素的值 [与设置属性值的方式相同,二者的区别由类型决定] shipTo.setString("name", "张三"); shipTo.setString("street", "东岳大街"); shipTo.setString("city", "泰安市"); shipTo.setString("state", "山东省"); shipTo.setString("zip", "27100"); DataObject billTo = po.createDataObject("billTo"); billTo.setString("country", "中国"); billTo.setString("name", "李四"); billTo.setString("street", "长乐街"); billTo.setString("city", "杭州"); billTo.setString("state", "浙江省"); billTo.setString("zip", "310000"); po.set("comment", "This is a test comment."); DataObject items = po.createDataObject("items"); DataObject item1 = items.createDataObject("item"); item1.setString("partNum", "123-AB"); item1.setString("productName", "apple"); item1.setString("price","1.2"); item1.setString("quantity", "12"); item1.setString("comment", "empty comment."); item1.setString("shipDate", "2010-06-30"); DataObject item2 = items.createDataObject("item"); item2.setString("partNum", "456-CD"); item2.setString("productName", "pear"); item2.setString("price","2.1"); item2.setString("quantity", "21"); item2.set("comment", "empty comment."); // -- save scope.getXMLHelper().save(po, "http://www.example.com/PO", "purchaseOrder",System.out); } catch(Exception e){ e.printStackTrace(); } } public static void loadTypesFromXMLSchemaFile(HelperContext helperContext,String filename)throws IOException{ XSDHelper xsdHelper = helperContext.getXSDHelper(); InputStream in = null; try { URL url = new File(filename).toURI().toURL(); in = url.openStream(); xsdHelper.define(in, url.toString()); } catch (IOException e){ System.err.print("[错误]:"); System.out.println("无法加载 " + filename + " ."); throw e; } finally { try { if (in != null) in.close();} catch (Exception e){} } } }
3:运行结果
<?xml version="1.0" encoding="UTF-8"?> <po:purchaseOrder xmlns:po="http://www.example.com/PO" orderDate="2010-07-07"> <shipTo country="中国"> <name>张三</name> <street>东岳大街</street> <city>泰安市</city> <state>山东省</state> <zip>27100</zip> </shipTo> <billTo country="中国"> <name>李四</name> <street>长乐街</street> <city>杭州</city> <state>浙江省</state> <zip>310000</zip> </billTo> <po:comment>This is a test comment.</po:comment> <items> <item partNum="123-AB"> <productName>apple</productName> <price>1.2</price> <quantity>12</quantity> <po:comment>empty comment.</po:comment> <shipDate>2010-06-30</shipDate> </item> <item partNum="456-CD"> <productName>pear</productName> <price>2.1</price> <quantity>21</quantity> <po:comment>empty comment.</po:comment> </item> </items> </po:purchaseOrder>