我相信已经理解了这篇文章中的所有内容,但我似乎还有一些工作要做。
如果我的类中有一个简单的继承树:
A (abstract)
^
B
^
C
我想在我的 xml 中有一个简单的对象列表,如下所示:
<mylist>
<B>lalala</B>
<C>fofofo</C>
<C>fofofo</C>
<C>fofofo</C>
<C>fofofo</C>
<B>lalala</B>
</mylist>
当我尝试验证此方案时,它似乎不起作用:
<xs:schema>
<xs:complexType name="A" abstract="true">
<xs:element name="text" type="xs:string"/>
</xs:complexType>
<xs:complexType name="B">
<xs:complexContent>
<xs:extension base="A"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="C">
<xs:complexContent>
<xs:extension base="B"/>
</xs:complexContent>
</xs:complexType>
<xs:element name="mylist>
<xs:sequence maxOccurs="unbounded">
<xs:element name="A" type="A"/>
</xs:sequence>
</xs:element>
</xs:schema>
请记住,这只是为了没有很多命名空间的短 xml 的伪代码。
为什么验证器告诉我(例如记事本++)它仍然期待 an
<A>
而不是 a<B>
或 a<C>
?