包含基本参数以及其他集合或数组的集合或数组的XML模式

时间:2014-04-04 16:00:57

标签: java xml arrays jaxb

我需要编写一个XML Schema,它允许生成需要采用非常特定格式的XML文件。我希望使用XML Schema和JAXB来创建数据对象,写入数据对象,然后将该数据对象封送到正确形成的XML中。

不幸的是,没有这个XML文档的模式,一些遗留代码以非常手动的方式读取该模式。因此,目标是创建一个XML Schema,允许JAXB以这种非常具体的方式进行编组。

我遇到了一个专门针对命名集合或数组的问题。我对此有一些变化,下面是最复杂的版本。

请注意,我无法控制目标所需的XML格式,因此我需要了解如何指示架构以便生成此格式。任何和所有建议都非常非常有用,我保证,XML架构专家,如果有人帮助我,那么他们将是我本周最喜欢的人!

以下是目标格式:

 <BetaInfo name="Beta ID" value="1">
      <SimpleBetaInfo>
         <Param name="Simple Beta A" value="Beta ID 1, Param A data"/>
         <Param name="Simple Beta B" value="Beta ID 1, Param B data"/>
      </SimpleBetaInfo>
      <ListBetaInfo name="List ID" value="1">
         <Param name="Item 1" value="Beta ID 1, List Index 1, Item 1 data"/>
         <Param name="Item 2" value="Beta ID 1, List Index 1, Item 2 data"/>
      </ListBetaInfo>
      <ListBetaInfo name="List ID" value="2">
         <Param name="Item 1" value="Beta ID 1, List Index 2, Item 1 data"/>
         <Param name="Item 2" value="Beta ID 1, List Index 2, Item 2 data"/>
      </ListBetaInfo>
 </BetaInfo>

1 个答案:

答案 0 :(得分:0)

这可能是一个起点。它描述了您提供的实例的结构,您可以对其进行调整以支持子元素的出现。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

    <xs:attributeGroup name="commonAttributes">
        <xs:attribute name="name"  type="xs:string"/>
        <xs:attribute name="value" type="xs:string"/>
    </xs:attributeGroup>

    <xs:element name="BetaInfo">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="SimpleBetaInfo" type="BetaInfoType" minOccurs="1" maxOccurs="1" />
                <xs:element name="ListBetaInfo"   type="BetaInfoType" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="commonAttributes"/>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="BetaInfoType">
        <xs:sequence>
            <xs:element name="Param" minOccurs="2" maxOccurs="2">
                <xs:complexType>
                    <xs:attributeGroup ref="commonAttributes"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attributeGroup ref="commonAttributes"/>
    </xs:complexType>

</xs:schema>

然而,上述模式不限制可以使用正则表达式完成的属性内容的结构,也不限制不同字段中的数据之间的关系(这将需要JAX中当前不支持的XSD 1.1)