2015-02-12 121 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