2011-04-21 1 views
1

Je suis relativement nouveau chez XML et j'ai un problème avec le schéma.Comment changer le schéma XML pour qu'il reconnaisse l'élément répétitif?

Voici ce que j'ai dans le fichier XML:

<?xml version="1.0" encoding="utf-8" ?> 
<Receipt> 
    <Customer> 
    <FullName>Sammy Stevan Djap</FullName> 
    <Address>Jalan Daan Mogot Raya No. 10</Address> 
    <Province>Sulawesi Utara</Province> 
    <City>Manado</City> 
    <ZipCode>95126</ZipCode> 
    <Telephone>62431862169</Telephone> 
    <Memo>Barang di kirim bareng - bareng</Memo> 
    </Customer> 
    <Order> 
    <Product> 
     <Name>Afduner Botol</Name> 
     <Unit>Botol</Unit> 
     <Quantity>10</Quantity> 
     <Price>4500</Price> 
     <Total>45000</Total> 
    </Product> 
    </Order> 
</Receipt> 

Et voici ce que j'ai dans le schéma:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Receipt"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Customer"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="FullName" type="xs:string" /> 
       <xs:element name="Address" type="xs:string" /> 
       <xs:element name="Province" type="xs:string" /> 
       <xs:element name="City" type="xs:string" /> 
       <xs:element name="ZipCode" type="xs:unsignedInt" /> 
       <xs:element name="Telephone" type="xs:unsignedLong" /> 
       <xs:element name="Memo" type="xs:string" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="Order"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Product"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="Name" type="xs:string" /> 
        <xs:element name="Unit" type="xs:string" /> 
        <xs:element name="Quantity" type="xs:unsignedByte" /> 
        <xs:element name="Price" type="xs:unsignedShort" /> 
        <xs:element name="Total" type="xs:unsignedShort" /> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Mon but est en fait de créer un fichier XML qui permet répétitif " Tag "Produit" Par exemple:

<?xml version="1.0" encoding="utf-8" ?> 
<Receipt> 
    <Customer> 
    <FullName>Sammy Stevan Djap</FullName> 
    <Address>Jalan Daan Mogot Raya No. 10</Address> 
    <Province>Sulawesi Utara</Province> 
    <City>Manado</City> 
    <ZipCode>95126</ZipCode> 
    <Telephone>62431862169</Telephone> 
    <Memo>Barang di kirim bareng - bareng</Memo> 
    </Customer> 
    <Order> 
    <Product> 
     <Name>Afduner Botol</Name> 
     <Unit>Botol</Unit> 
     <Quantity>10</Quantity> 
     <Price>4500</Price> 
     <Total>45000</Total> 
    </Product> 
    <Product> 
     <Name>Alat Potong Keramik 3 in 1</Name> 
     <Unit>Buah</Unit> 
     <Quantity>5</Quantity> 
     <Price>205000</Price> 
     <Total>1025000</Total> 
    </Product> 
    </Order> 
</Receipt> 

Apparemment, mon schéma ne sait pas que j'appellerai la balise "Product" répétitivement. À l'heure actuelle, mon schéma n'autorise qu'une seule étiquette "Product" à être appelée. Par conséquent, ma question est: savez-vous comment changer mon schéma pour qu'il me permette d'ajouter plusieurs balises «Product» dans la balise «Order»?

+0

Je voudrais interroger certains des types de données que vous utilisez. La modélisation de zipCode et de Telephone en tant que nombres entiers signifie que vous risquez de perdre des zéros en tête - est-ce vraiment ce que vous voulez? Et non signéByte pour la quantité - ne voulez-vous vraiment pas permettre aux gens de commander plus de 255 de n'importe quoi? –

Répondre

3

Ajouter minOccurs="0" et maxOccurs="unbounded" à l'élément <xs:element name="Product">. Si vous voulez au moins un Product, utilisez .

+0

cela fonctionne comme une magie .. Merci – Sammm