如何使用来自两个不同XSD的不同子元素访问相同的复杂类型元素

时间:2015-12-01 12:05:40

标签: java xml xsd

我有两个xsd result1.xsd和result2.xsd,其中不同的根元素是Result1,Result2和commons_type.xsd,它们都包含在两个XSD中。

Result1.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.test.com"
           xmlns="http://www.test.com"
           elementFormDefault="qualified">

    <xs:include schemaLocation="common_types.xsd"/>

    <xs:element name="Result1">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="startTime" type="xs:dateTime"/>
                <xs:element name="endTime" type="xs:dateTime" minOccurs="0"/>                
            </xs:sequence>
        </xs:complexType>
    </xs:element>  

</xs:schema>

Result2.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.test.com"
           xmlns="http://www.test.com"
           elementFormDefault="qualified">

    <xs:include schemaLocation="common_types.xsd"/>

    <xs:element name="Result2">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="passingTime" type="xs:dateTime"/>                            
            </xs:sequence>
        </xs:complexType>
    </xs:element> 
</xs:schema>

commons_type.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.test.com"
           xmlns="http://www.test.com"
           elementFormDefault="qualified">

    <xs:import namespace="http://www.w3.org/2001/XMLSchema"/>

    <xs:simpleType name="idType">
        <xs:restriction base="xs:string">           
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="unitType">
        <xs:restriction base="xs:string">            
        </xs:restriction>
    </xs:simpleType>
 </xs:schema>

我使用XMLBeans scomp生成了两个jar result1.jar和result2.jar并在eclipse中导入这些jar。

我创建了两个文档对象

Result1 res1 =  Result1.factory.newInstance() 
Result2 res2 = Result2.factory.newInstance()

现在,我想从res1访问startTime和endTime,从res2访问times。 但是,我也获得了res2的startTime和endTime。

预计会:

res1.setStartTime() ,res1.setEndTime() and res2.setPassingTime()

实际是:

res1.setStartTime() ,res1.setEndTime() and res2.setStartTime() ,res2.setEndTime()

0 个答案:

没有答案