我有以下的地图包含双人床或整型实例作为值,这两个扩展抽象类号码,注解如下:JAXB地图与抽象类值
@XmlElement(name="settings")
private Map<String,Number> settings;
它整理成XML如下:
<settings>
<entry>
<key>SETTING_A</key>
<value xsi:type="xs:double">0.03</value>
</entry>
<entry>
<key>SETTING_B</key>
<value xsi:type="xs:int">1000</value>
</entry>
</settings>
我还需要为这种类型的XML提供XSD,这里是我遇到问题的地方。我试图用选择定义一个complexType,但不起作用,因为包含int的元素和包含double的元素不能具有相同的名称(即它们不能同时被命名为“value” ),这正是JAXB生成的XML所做的。
以下XSD会的工作,但我不希望有不同的元素名称(或):
<xsd:complexType name="Entry">
<xsd:sequence>
<xsd:element name="key" type="NimrodSettingKey" minOccurs="1" maxOccurs="1"/>
<xsd:choice>
<xsd:element name="double" type="xsd:double" minOccurs="1" maxOccurs="1"/>
<xsd:element name="int" type="xsd:integer" minOccurs="1" maxOccurs="1"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
,我应该如何指定的元素可能是一个int或双任何建议我的XSD文件?
谢谢!
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Settings"/>
<xsd:complexType name="Settings">
<xsd:sequence>
<xsd:element name="key" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:choice>
<xsd:element name="value" xs:type="xsi:double" minOccurs="1" maxOccurs="1" />
<xsd:element name="value" xs:type="xsi:integer" minOccurs="1" maxOccurs="1" />
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
但我的XSD编辑器,这个抱怨:用我的XSD以下方法,它把同一个名字一个元素的选择中
编辑#1
@svasa建议错误:
complex type 'Settings' violates the unique particle attribution rule in its components 'value' and 'value'
我认为这意味着下面的两个元素必须有不同的名称,他们可以两者都被命名为“价值”。
由'包含一个int值和那些包含一个数字的值不能具有相同的名称'你的意思是'键'不能有'int'和'double'的同名吗? – SomeDude
是的,例如key = SETTING_A值= 0.5d(double),key = SETTING_B value = 1000(和int)。 – Guillem