1:schema文件company.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:company="company.ns"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="company.ns">
<xsd:element name="company" type="company:CompanyType"/>
<xsd:complexType name="CompanyType">
<xsd:sequence>
<xsd:element name="departments" type="company:DepartmentType" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="employeeOfTheMonth" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="DepartmentType">
<xsd:sequence>
<xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="location" type="xsd:string"/>
<xsd:attribute name="number" type="xsd:int"/>
</xsd:complexType>
<xsd:complexType name="EmployeeType">
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="SN" type="xsd:ID"/>
<xsd:attribute name="manager" type="xsd:boolean"/>
</xsd:complexType>
</xsd:schema>
2:java代码
package com.waysoft.intergration.dao;
import java.io.File;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.tuscany.sdo.api.SDOUtil;
import commonj.sdo.DataGraph;
import commonj.sdo.DataObject;
import commonj.sdo.helper.HelperContext;
import commonj.sdo.helper.XSDHelper;
import commonj.sdo.impl.HelperProvider;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
try {
HelperContext helperContext = HelperProvider.getDefaultContext();
XSDHelper xsdHelper = helperContext.getXSDHelper();
URL url = new File(Test2.class.getResource("/").getPath().substring(1)+"company.xsd").toURI().toURL();
xsdHelper.define(url.openStream(), url.toString());
DataGraph graph = SDOUtil.createDataGraph();
DataObject company = graph.createRootObject("company.ns","CompanyType");
populateGraph(company);
Map<String, String> options = new HashMap<String, String>();
DataObject root = graph.getRootObject();
System.out.println("company name:"+root.getString("name"));
System.out.println("company employeeOfTheMonth:"+root.getString("employeeOfTheMonth"));
DataObject departments= root.getDataObject("departments");
System.out.println("\rdepartments name:"+departments.getString("name"));
System.out.println("departments location:"+departments.getString("location"));
System.out.println("departments number:"+departments.getInt("number"));
System.out.println();
@SuppressWarnings("unchecked")
List<DataObject> employeesList = (List<DataObject>)departments.getList("employees");
for(DataObject employees : employeesList){
System.out.println("employees name:"+employees.getString("name"));
System.out.println("employees SN:"+employees.getString("SN"));
System.out.println("employees manager:"+employees.getString("manager"));
System.out.println();
}
DataObject employeeFromXPathByValue0 = company.getDataObject("departments/employees.0");
DataObject employeeFromXPathByValue1 = company.getDataObject("departments/employees.1");
DataObject employeeFromXPathByValue2 = company.getDataObject("departments/employees.2");
System.out.println("employeeFromXPathByValue0 SN:"+employeeFromXPathByValue0.getString("SN"));
System.out.println("employeeFromXPathByValue1 SN:"+employeeFromXPathByValue1.getString("SN"));
System.out.println("employeeFromXPathByValue2 SN:"+employeeFromXPathByValue2.getString("SN"));
System.out.println();
DataObject employeeFromXPathByValue_0 = company.getDataObject("departments/employees[SN='E002']");
DataObject employeeFromXPathByValue_1 = company.getDataObject("departments/employees[SN='E003']");
DataObject employeeFromXPathByValue_2 = company.getDataObject("departments/employees[SN='E004']");
System.out.println("employeeFromXPathByValue_0 SN:"+employeeFromXPathByValue_0.getString("SN"));
System.out.println("employeeFromXPathByValue_1 SN:"+employeeFromXPathByValue_1.getString("SN"));
System.out.println("employeeFromXPathByValue_2 SN:"+employeeFromXPathByValue_2.getString("SN"));
SDOUtil.saveDataGraph(graph, System.out, options);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void populateGraph(DataObject company) {
company.setString("name", "ACME");
company.setString("employeeOfTheMonth", "E001");
DataObject departments = company.createDataObject("departments");
departments.setString("name", "Advanced Technologies");
departments.setString("location", "NS");
departments.setString("number", "123");
DataObject johnJones = departments.createDataObject("employees");
johnJones.setString("name", "John Jones");
johnJones.setString("SN", "E002");
DataObject janeDoe = departments.createDataObject("employees");
janeDoe.setString("name", "Jane Doe");
janeDoe.setString("SN", "E003");
DataObject fred = departments.createDataObject("employees");
fred.setString("name", "Fred");
fred.setString("SN", "E004");
fred.setString("manager", "true");
}
}
3:运行结果
company name:ACME
company employeeOfTheMonth:E001
departments name:Advanced Technologies
departments location:NS
departments number:123
employees name:John Jones
employees SN:E002
employees manager:false
employees name:Jane Doe
employees SN:E003
employees manager:false
employees name:Fred
employees SN:E004
employees manager:true
employeeFromXPathByValue0 SN:E002
employeeFromXPathByValue1 SN:E003
employeeFromXPathByValue2 SN:E004
employeeFromXPathByValue_0 SN:E002
employeeFromXPathByValue_1 SN:E003
employeeFromXPathByValue_2 SN:E004
<?xml version="1.0" encoding="ASCII"?>
<sdo:datagraph xmlns:company="company.ns" xmlns:sdo="commonj.sdo">
<company:CompanyType name="ACME"
employeeOfTheMonth="E001">
<departments name="Advanced Technologies" location="NS" number="123">
<employees name="John Jones" SN="E002"/>
<employees name="Jane Doe" SN="E003"/>
<employees name="Fred" SN="E004" manager="true"/>
</departments>
</company:CompanyType>
</sdo:datagraph>