JAXB xsd如何使用数组成员作为引用

时间:2018-03-14 14:34:36

标签: java xml xsd jaxb

我有两个包含数据的格式良好的.xml输入文件。

character.xml

    <Character ID="1">
        <Name>jfkfd</Name>
        <CharPart>
            <Marks>mk1 mk4 mk6 mk9</Marks>
    ...

marks.xml

    <Marks>
    <Type ID="mk0">
            <Name>None</Name>
    </Type>
    <Type ID="mk1">
            <Name>abc</Name>
    </Type>
    <Type ID="mk2">
            <Name>def</Name>
    </Type>
    ...

我创建了schema.xsd definig 字符标记。到目前为止一切都很好。

<xsd:element name="Character">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string" />
            <xsd:element name="CharPart">
                <xsd:complexType>
                    <xsd:sequence>                        
                        <xsd:element name="Marks" type="marksList"/>                               
                    </xsd:sequence>
                </xsd:complexType>                    
            </xsd:element>                                          
        </xsd:sequence>
        <xsd:attribute name="ID" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>

<xsd:element name="Marks">        
    <xsd:complexType >
        <xsd:sequence>
            <xsd:element name="Type" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="Name" type="xsd:string" />
                    </xsd:sequence>
                    <xsd:attribute name="ID" type="xsd:string" />
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>   

<xsd:simpleType name="marksList">
    <xsd:list itemType="xsd:string"/>
</xsd:simpleType>  

解压缩两个文件使我能够遍历两个列表。这样我就可以检查来自 marksList id 的值之间的相等性,如下所示:

    for(Marks.Type type : marks.getType()) {
        for(String s : character.getCharPart().getMarks()){
            if(s.equals(type.getID())){
            ... 
            }
        }
    }

我现在的问题是如何使用<Marks>mk1 mk4 mk6 mk9</Marks>而不必使用预处理器将它们拆分,以便JAXB自动创建将这些"String"值作为引用处理的Java源代码?

1 个答案:

答案 0 :(得分:1)

尝试将类型更改为just_a_list = list_of_products for product in just_a_list: if list_of_products.count(product) > 1: list_of_products.remove(product) 或通常使用xsd:IDREF代替xsd:IDREFS