我有四个元素 A、B、C、D。我想创建一个 XSD,其架构应选择 [A & B & C] 或 [A & D]。<xs:schema xmlns:w3="http://www.w3.org/TR/xmlschema-1/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0"><xs:element name="abcd"> <xs:complexType> <xs:choice> <xs:element name="A" type="xs:string"/> <xs:sequence> <xs:element name="B" type="xs:dateTime"/> <xs:element name="C" type="xs:decimal"/> </xs:sequence> <xs:sequence> <xs:element name="D" type="xs:dateTime"/> </xs:sequence> </xs:choice> </xs:complexType></xs:element>这是正确的吗?我通过 xjc 从 xsd 生成了 java 类。我得到这个文件:@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "", propOrder = {"a","b","c","d"})public class abcd {@XmlElement(name = "a", required = true)protected String a;@XmlElement(name = "b")protected String b;@XmlElement(name = "c")protected BigDecimal c;@XmlElement(name = "d")protected String d;// get&set}此类与我的 xsd 方案不匹配。我究竟做错了什么?
1 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
您的模式接受 [A]、[B & C] 或 [D] 的选择。
另一种思考方式[A & B & C] or [A & D]是[A] followed by either [B & C] or [D]。这可以在 XSD 中表示,方法是将 A 元素从选项中移出到一个序列中,如下所示:
<xs:element name="abcd">
<xs:complexType>
<xs:sequence>
<xs:element name="A" type="xs:string"/>
<xs:choice>
<xs:sequence>
<xs:element name="B" type="xs:dateTime"/>
<xs:element name="C" type="xs:decimal"/>
</xs:sequence>
<xs:element name="D" type="xs:dateTime"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
添加回答
举报
0/150
提交
取消