Generating parent tag for a xs:sequence elements

In my xsd, I have something like this:

    <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>

I generated JAXB classes from above xsd and create an object of type Server and populated the arraylist named disk. Now when I try to marshal Server object to xml, I see:

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

Is there any way by which I should see XML like:

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

I want the list of disks xml tags to be enclosed in the tag. If it is possible, how to do it?

Upvotes: 1

Views: 58

Answers (1)

Naren
Naren

Reputation: 1477

If u want tag can occurs many times in server tag use this.

<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>

Or if you want Disks tag only once use following 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>

Upvotes: 2

Related Questions