type属性不能与带有属性的simpleType或complexType一起出现

时间:2017-06-13 15:41:15

标签: xml types xsd attributes

我非常(非常)是XSD和XML的新手,所以我开始使用我提出的XML文档中的在线工具生成我的XSD架构。 XML的一部分是:

    <code base="16">2A</code>

该工具为此生成的XSD是:

    <xs:element name="code" type="xs:int">
        <xs:complexType>
            <xs:attribute name="base" type="xs:int"></xs:attribute>
        </xs:complexType>
    </xs:element>

这对我来说似乎合乎逻辑;有一个名为code的元素,其值为int,该元素可以包含名称为base的属性,其值也属于{{1}类型}。

然而,当我在Visual Studio中打开它时,它会抱怨int标记,因为:

  

typeType属性或complexType

不能出现type属性

遗憾的是,这似乎也是合乎逻辑的,如果在元素中定义了类型,为什么还会使用xs:element标记进一步定义类型?

因此,我的问题的关键;如何在XSD中正确定义具有类型值和类型属性的元素?

我已经看到了这个问题:The type attribute cannot be present with either simpleType or complexType但是它与我的n00b级别的XSD知识完全不同,我完全不同了。

建议的重复Error: The element has a type attribute as well as an anonymous child type是关于具有嵌套元素的属性...这个任务是关于一个元素的属性,该元素不是嵌套的,但在属性和元素上都有类型(如果那是&#39; s同样的事情,我的知识水平太低,无法掌握它,所以我还需要进一步的解释)

1 个答案:

答案 0 :(得分:1)

您提到的链接解决了直接错误,您无法同时指定xs:element/@type="xs:int"属性和xs:element/xs:complexType子元素(匿名类型)。

还有什么可以解释的是你如何实现编写验证XML的XSD的目标,

<code base="16">2A</code>

以下XSD将执行此操作:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="code">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="base" type="xs:int"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>