为何Visual Studio 2017提示xsd:complexType的min/maxOccurs不受支持?
问题原因:
<xsd:complexType>不支持minOccurs/maxOccurs属性 嘿,这个问题我之前也踩过坑!核心原因很简单:minOccurs和maxOccurs这两个属性,从XSD语法规则上来说,根本就不属于<xsd:complexType>元素的合法属性。
这俩属性的作用是用来控制XML实例文档中元素的出现次数,只能用在这些场景:
- 全局的
<xsd:element>标签上(比如你定义的根元素) - 嵌套在
<xsd:sequence>/<xsd:choice>/<xsd:all>里的局部<xsd:element>标签上 <xsd:group>的引用标签上
回到你的代码,你错误地把这两个属性加在了<xsd:complexType>上——复杂类型只是用来定义元素的结构规则,它本身不需要控制出现次数,出现次数是由引用这个类型的元素来决定的。
修正后的示例代码
把minOccurs和maxOccurs移到引用该复杂类型的元素上就可以了,比如你的代码可以改成这样:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema targetNamespace="http://versionschema.org/xmlns/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:vs="http://versionschema.org/xmlns/" elementFormDefault="unqualified" attributeFormDefault="unqualified"> <!-- 根元素上可以指定出现次数(其实默认就是minOccurs=1、maxOccurs=1,可显式写也可省略) --> <xsd:element name="VersionSchema" type="vs:VersionSchema" minOccurs="1" maxOccurs="1"/> <!-- 复杂类型定义移除多余的min/maxOccurs属性 --> <xsd:complexType name="VersionSchema"> <!-- 这里添加你的复杂类型结构,比如嵌套元素 --> <xsd:sequence> <!-- 局部元素可以用min/maxOccurs控制出现次数 --> <xsd:element name="BuildNumber" type="xsd:string" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
简单再梳理下逻辑:复杂类型负责“定义元素长什么样”,而minOccurs/maxOccurs负责“定义这个元素在XML里能出现几次”,这俩职责是分开的,不能混在一起用哦。
内容的提问来源于stack exchange,提问作者jwdonahue
相关产品推荐
相关产品推荐

