【发布时间】:2009-09-10 20:38:16
【问题描述】:
我的 XML 包含一个具有以下属性的元素:xsi:type="AnswerBool"。我的 xsd 具有该元素并设置了一个名为“type”的属性,然后将枚举值限制为“AnswerBool”(和其他)。但是,当我尝试验证 XML 时它失败了。如果我更改 XML 以使元素使用 type 而不是 xsi:type 一切都很好。
XML:
<Answer xsi:type="AnswerBool">
-1
XSD:
<xs:element name="Answer" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Value">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="xsd:int"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="AnswerBool"/>
<xs:enumeration value="AnswerMsc2DTO"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
我尝试将“type”属性命名为“xsi:type”,但名称中不允许有“:”。不幸的是,我无法将 XML 更新为在“type”之前不使用“xsi:”。我知道我正在做的基本上是某种解决方法,以允许我的“答案”元素使用多种不同的类型。所以我可能把事情推得太远,无法让这一切正常工作。不过……
是否有人对如何让我的 XML 进行验证有任何想法?
我的意思是有没有办法在我的属性名称中包含“xsi:”,或者有没有办法让验证过程只查看“类型”部分而忽略“xsi:”?
【问题讨论】:
标签: xml validation xsd