我有以下的地圖包含雙人牀或整型實例作爲值,這兩個擴展抽象類號碼,註解如下: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