【问题标题】:XSD: define complex element with attribute and other child elementsXSD:用属性和其他子元素定义复杂元素
【发布时间】:2016-03-18 08:31:20
【问题描述】:

我想定义一个这样的元素:

<A id='1'>
  <name>jack</name>
</A>

在下面我可以定义元素 A 的属性 id

<xs:complexType name="A">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:int" name="id"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

其实不正确,上面的XSD定义了一个元素&lt;A id="1"&gt;hi&lt;/A&gt;。我不知道如何丢弃&lt;xs:extension&gt;元素的基本属性。

通过下面的 XSD,我可以定义内部元素 &lt;name&gt;

<xs:element name = "A">
    <xs:complexType>
        <xs:sequence>

            <xs:element name = "name" type="xs:string"/>

        </xs:sequence>
    </xs:complexType>
</xs:element>

我可以像下面这样将这两者结合在一起吗?我无法使语法正确。

    <xs:element name = "A">
        <xs:complexType>
            <xs:sequence>
                <xs:element name = "name" type="xs:string"/>                       
            </xs:sequence>
        </xs:complexType>
        <xs:simpleContent>
          <xs:extension>
            <xs:attribute type="xs:int" name="id"/>
          </xs:extension>
        </xs:simpleContent>
    </xs:element>

【问题讨论】:

    标签: xml xsd xsd-validation xml-validation


    【解决方案1】:

    您的 XML 或声明的约束中没有任何内容表明此处需要 xs:extension

    以下简单的 XSD,

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="A">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string"/>
          </xs:sequence>
          <xs:attribute name="id" type="xs:int"/>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    

    将验证您的 XML,

    <A id='1'>
      <name>jack</name>
    </A>
    

    根据要求。

    【讨论】:

    • 还有一点需要注意的是xs:attribute 必须xs:sequence之后在xs:complexType
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多