如何在带有字符串内容的元素上允许属性?

时间:2015-12-14 13:40:16

标签: xml parsing xsd xml-validation

我正在尝试为以下XML编写XSD:

  <users>
    <user id='u1'>A</user>
    <user id='u2'>B</user>
    <user id='u3'>C</user>
  </users>

这是我到目前为止所做的:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="users">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="user" maxOccurs="unbounded" type="xsd:string">
                <xsd:attribute name="id" type="xsd:string"/>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
</xsd:schema>

但它返回errror:

  

元素   '{http://www.w3.org/2001/XMLSchema}元素':内容无效。   预期是(注释?,((simpleType | complexType)?,(唯一|键   | keyref)*))

id属性是用户的id。 知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

以下是如何使用simpleContentxsd:string)和XSD中的属性定义元素:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="users">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="user" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:simpleContent>
              <xsd:extension base="xsd:string">
                <xsd:attribute name="id" type="xsd:string"/>
              </xsd:extension>
            </xsd:simpleContent>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

(您的错误与maxOccurs无限制无关。它与您的user元素的内容模型有关。)