2015-02-12 99 views
1

我在努力弄清楚如何構建我的XSD驗證,以便正確驗證我的XML文件。包含屬性和文本的XML元素和XSD驗證

我的元素languages包含元素language其中包含文本和id字段。

我驗證告訴我,我有:Validation Error: The element 'languages' has invalid child element 'language'.

如何正確結構呢?我是否需要complexType爲我的language元素?

XSD

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="dataset"> 
     <xsd:complexType> 
      <xsd:all> 
       <xsd:element name="languages"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element name="language"> 
           <xsd:complexType mixed="true"> 
            <xsd:simpleContent> 
             <xsd:extension base="xsd:string"> 
              <xsd:attribute name="id" type="xsd:integer"/> 
             </xsd:extension> 
            </xsd:simpleContent> 
           </xsd:complexType> 
          </xsd:element> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

XML

<?xml version="1.0" encoding="ISO-8859-1"?> 
<dataset> 
    <languages> 
     <language id="0">C</language> 
     <language id="1">C++</language> 
    </languages> 
</dataset> 

回答

1

以下XSD將驗證您的XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="dataset"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="languages"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="language" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:simpleContent> 
        <xs:extension base="xs:string"> 
         <xs:attribute name="id"> 
         </xs:attribute> 
        </xs:extension> 
        </xs:simpleContent> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

注:

  • 錯誤消息與基數有關(maxOccurs="unbounded")。
  • 你可能不想要mixed="true",除非language打算 有可能的標記與其內容中的文字混合。
+0

所以我忘了:maxOccurs =「unbounded」.. Jeez ...謝謝:D – HelpNeeder 2015-02-12 01:37:20

+1

是啊,不能告訴你我有多少次誤將錯誤與我最擔心的錯誤而不是實際負責問題的簡單問題。 – kjhughes 2015-02-12 01:43:36

+0

有效的點。另外,感謝您發佈的筆記。 – HelpNeeder 2015-02-12 02:22:56