嗨,我已经完成了用XML进行电子学习会话的任务。我需要限制每个字符串值和xml内部的每个整数值(元素和属性)。我没有遇到处理这些情况的问题,因为那些值是相同的类型,我正在努力解决当它是一个整数和另一个字符串时它应该如何工作。 xml文件看起来像这样。
<car id="5">
<brand origin="Italy">Lamorghini</brand>
<model body="sedan">Huracan</model>
<year>2017</year>
<cc engineType="gasoline">5204</cc>
<registered>Switzerland</registered>
</car>
现在我专注于“cc”元素,这是我主要关心的问题。据我所知,因为它有一个属性它只能是 complexType ,但由于元素的值是整数(这是一个simpleType),验证器会给出错误。
<xsd:complexType name="TypeCC">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="330"/>
<xsd:maxInlcusive value="8277"/>
</xsd:restriction>
</xsd:complexType>
我尝试了多种方法,但没有一种方法可行,我认为我缺少一些理解。 Validator指定基类型作为预期的关注点。
我还想知道上面xml中的每个属性是否应该放在<xsd:sequence/>
之外,但是在元素汽车的 complexType 内 ?如下例所示?
<xsd:complexType name="TypeCar">
<xsd:sequence>
<xsd:element name="brand" type="TypeBrand"/>
.
.
.
</xsd:sequence>
<xsd:attribute name="id" type="xsd:integer" use="required"/>
.
.
<xsd:attribute name="engineType" type="TypeEngine"/>
</xsd:complexType
对我缺乏发布技巧感到宽容,这是我第一次来这里。总结一下,我想知道如何解决混合类型的问题和属性的正确位置。非常感谢您的回答。
答案 0 :(得分:0)
关于TypeCC
我唯一知道这样做是使用额外的复杂类型作为TypeCC
的基础。例如:
<xsd:element name="cc" type="tns:TypeCC"></xsd:element>
<xsd:complexType name="BaseTypeCC" mixed="true">
<xsd:simpleContent>
<xsd:extension base="xsd:integer">
<xsd:attribute name='engineType' type="xsd:string"></xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="TypeCC" mixed="false">
<xsd:simpleContent>
<xsd:restriction base="tns:BaseTypeCC">
<xsd:minInclusive value="330"/>
<xsd:maxInclusive value="8277"/>
</xsd:restriction>
</xsd:simpleContent>
</xsd:complexType>
重审问题
我还想知道上面xml中的每个属性是否都是假设的 放在&lt; xsd:sequence /&gt;之外,但在complexType的内部 元素车?
否只有car
元素的属性才会出现。其他人进入了自己元素的内容模型定义。