2010-04-07 3 views
2

J'ai un document XML avec trois éléments fils qui se répètent dans n'importe quel ordre. J'avais xsd: élément de séquence dans le xsd à cause duquel le xml n'est pas validé. Je ne peux pas utiliser xsd: tout parce que les éléments se produisent plus d'une fois.Comment valider un fichier XML avec des éléments enfants répétitifs

Veuillez m'aider à ce sujet.

Voici le xml

<Trailer>  
     <TrailerField name="SegmentLabelOne" length="4" type="String">TSTS</TrailerField> 
     <TrailerField name="SegmentLabelTwo" length="2" type="String">00</TrailerField> 
     <CountItem length="10" type="Numeric">MT</CountItem> 
     <TrailerField name="SegmentLabelThree" length="2" type="String">01</TrailerField> 
     <CountItem length="10" type="Numeric">MA</CountItem> 
     <TrailerField name="SegmentLabelFour" length="2" type="String">02</TrailerField> 
     <TrailerField name="FilerOne" length="65" type="String">                 </TrailerField> 
</Trailer> 

Et voici le xsd

<xsd:complexType name="TrailerSegment"> 
<xsd:sequence> 
      <xsd:element name="NameOfElement" minOccurs="0" maxOccurs="unbounded"> 
       <xsd:complexType> 
        <xsd:simpleContent> 
         <xsd:extension base="xsd:string"> 
          <xsd:attribute name="name" type="xsd:string"></xsd:attribute> 
         </xsd:extension> 
        </xsd:simpleContent> 
       </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="CountItem" minOccurs="0" maxOccurs="unbounded"> 
       <xsd:complexType> 
        <xsd:simpleContent> 
         <xsd:extension base="xsd:string"> 
          <xsd:attribute name="length" type="xsd:string"></xsd:attribute> 
          <xsd:attribute name="type" type="xsd:string"></xsd:attribute> 
         </xsd:extension> 
        </xsd:simpleContent> 
       </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="TrailerField" minOccurs="0" maxOccurs="unbounded"> 
       <xsd:complexType> 
        <xsd:simpleContent> 
         <xsd:extension base="xsd:string"> 
          <xsd:attribute name="name" type="xsd:string"></xsd:attribute> 
          <xsd:attribute name="length" type="xsd:string"></xsd:attribute> 
          <xsd:attribute name="type" type="xsd:string"></xsd:attribute> 
         </xsd:extension> 
        </xsd:simpleContent> 
       </xsd:complexType> 
      </xsd:element> 
</xsd:sequence> 
</xsd:complexType> 
+0

Je suis un nouvel utilisateur à empiler débordement et donc ne connaissait pas le protocole. Toutes mes excuses pour le même et merci encore pour vos aimables contributions – gsk

Répondre

8

Vous avez besoin quelque chose comme ceci:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Trailer"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:choice maxOccurs="unbounded"> 
      <xs:element name="TrailerField"> 
      <xs:complexType> 
       <xs:simpleContent> 
       <xs:extension base="xs:string"> 
        <xs:attribute name="name" type="xs:string" use="required" /> 
        <xs:attribute name="length" type="xs:unsignedByte" use="required" /> 
        <xs:attribute name="type" type="xs:string" use="required" /> 
       </xs:extension> 
       </xs:simpleContent> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="CountItem"> 
      <xs:complexType> 
       <xs:simpleContent> 
       <xs:extension base="xs:string"> 
        <xs:attribute name="length" type="xs:unsignedByte" use="required" /> 
        <xs:attribute name="type" type="xs:string" use="required" /> 
       </xs:extension> 
       </xs:simpleContent> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Le <xs:choice> vous donne le choix d'une des les éléments à l'intérieur du choix, et puisque le <xs:choice> a un attribut de maxOccurs=unbounded, vous pouvez avoir un certain nombre de répétitions donc -> vous pouvez choisir n'importe quel nombre de ces éléments inclus, dans n'importe quel ordre.

+0

Cela fonctionne maintenant. Merci beaucoup. – gsk

Questions connexes