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

XML element and XSD validation that contains both attribute and text

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

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

我的验证器告诉我我有:Validation Error: The element 'languages' has invalid child element 'language'.

如何正确构建它?我的 language 元素还需要 complexType 吗?

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>

以下 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 可能在其内容中混合了文本标记。