包含属性和文本的XML元素和XSD验证

时间:2015-02-12 01:23:14

标签: xml xsd

我正在努力弄清楚如何构建我的XSD验证,以便正确验证我的XML文件。

我的元素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 个答案:

答案 0 :(得分: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是打算的 可能的标记与其内容中的文本混合在一起。