我非常(非常)是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同样的事情,我的知识水平太低,无法掌握它,所以我还需要进一步的解释)
答案 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>