2010-04-07 64 views
2

我有一個xml文檔,其中包含三個以任意順序重複的子元素。 我有 xsd:xsd中的序列元素,因爲xml沒有得到驗證。 我無法使用xsd:all,因爲元素會多次出現。如何使用重複的子元素驗證xml

請幫助我。

這裏是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> 

這裏是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

我是一個新的用戶堆棧溢出,因此不知道協議。對於同樣的道歉,並再次感謝您的友好投入 – gsk 2010-04-14 08:45:31

回答

8

你需要的東西是這樣的:

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

<xs:choice>給你的任何一個的選擇選擇內的元素,並且自<xs:choice>有一個屬性maxOccurs=unbounded,因此可以有任意數量的重複 - >您可以按任意順序選擇包含的任意數量的元素。

+0

它現在工作。非常感謝。 – gsk 2010-04-07 08:52:51