为xs:sequence元素生成父标记

时间:2014-02-17 05:04:01

标签: java xml jaxb xsd

在我的xsd中,我有类似的东西:

    <xs:complexType name="Disk">
        <xs:attribute name="index" type="xs:int"></xs:attribute>
        <xs:attribute name="providerId" type="xs:int"></xs:attribute>
        <xs:attribute name="size" type="xs:int"></xs:attribute>
    </xs:complexType>

    <xs:complexType name="Server">
        <xs:sequence>
         <xs:element name="Disk" maxOccurs="unbounded" type="Disk"></xs:element>
            </xs:sequence>
    </xs:complexType>

我从xsd上面生成了JAXB类,并创建了一个Server类型的对象,并填充了名为disk的arraylist。现在,当我尝试将Server对象编组为xml时,我看到:

<server><Disk index="0" providerId="123" size="10000"/><Disk index="1" providerId="1234" size="10000"/></server>

我有什么方法可以看到XML:

<server><Disks><Disk index="0" providerId="123" size="10000"/><Disk index="1" providerId="1234" size="10000"/></Disks></server>

我希望将磁盘列表xml标记包含在标记中。如果有可能,怎么做?

1 个答案:

答案 0 :(得分:2)

如果你想在服务器标签中多次出现标签,可以使用它。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:complexType name="Disk">
        <xs:attribute name="index" type="xs:int"></xs:attribute>
        <xs:attribute name="providerId" type="xs:int"></xs:attribute>
        <xs:attribute name="size" type="xs:int"></xs:attribute>
    </xs:complexType>

    <xs:complexType name="Server">
        <xs:sequence>
         <xs:element name="Disks" maxOccurs="unbounded" type="Disks"></xs:element>
            </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Disks">
     <xs:sequence>

      <xs:element name="Disk" maxOccurs="unbounded" type="Disk"></xs:element>
     </xs:sequence>
    </xs:complexType>
</xs:schema>

或者,如果您希望仅使用磁盘标记一次,请使用XSD

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:complexType name="Disk">
        <xs:attribute name="index" type="xs:int"></xs:attribute>
        <xs:attribute name="providerId" type="xs:int"></xs:attribute>
        <xs:attribute name="size" type="xs:int"></xs:attribute>
    </xs:complexType>

    <xs:complexType name="Server">
        <xs:sequence>
         <xs:element name="Disks" minOccurs="0"  maxOccurs="1" type="Disks"></xs:element>
            </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Disks">
     <xs:sequence>

      <xs:element name="Disk" maxOccurs="unbounded" type="Disk"></xs:element>
     </xs:sequence>
    </xs:complexType>
</xs:schema>