我有这种形式的XSD:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/example"
xmlns:tns="http://www.example.org/example" elementFormDefault="qualified">
<complexType name="bType">
</complexType>
<complexType name="aType">
<choice maxOccurs="unbounded">
<element name="a" type="tns:aType" />
<element name="b" type="tns:bType" />
</choice>
</complexType>
<element name="topelement">
<complexType>
<sequence>
<element name="a" type="tns:aType" maxOccurs="1" />
</sequence>
</complexType>
</element>
</schema>
我希望与之匹配的XML文件,例如:
<?xml version="1.0" encoding="UTF-8"?>
<topelement xmlns="http://www.example.org/example"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/example example.xsd ">
<a> <!-- Error on this line. -->
<a/>
<b/>
<b/>
<a/>
</a>
</topelement>
不幸的是,XSD说这对以下错误无效:
cvc-complex-type.2.4.b: The content of element 'a' is not complete. One of '{"http://www.example.org/example":a, "http://www.example.org/example":b}' is expected. example.xml line 5
据我所知,我已经完成了标签完成所需的一切。我已经用无限选择的'a'和'b'标签填充它。任何人都可以看到出了什么问题吗?
为了澄清,我希望在topelement下只有一个'a'标签,在其下面,混合了'a'和'b'标签。
答案 0 :(得分:5)
答案 1 :(得分:3)
错误发生在第二个a
,而不是第二个a
需要在其下方选择的第一个错误。
答案 2 :(得分:1)
解决了......错误是误导性的,因为它抱怨错误的'a'。
将顶级'a'重命名为'c',它仍会在第5行抱怨'a'。
修复是将minOccurs = 0添加到choice元素中,这样就不是所有'a'元素都需要子元素。