У меня есть простой XML-код, подобный этому:
<ContainerElement>
<MapEntry key="key1" value="value1"/>
<MapEntry key="key2" value="value2"/>
<MapEntry key="key3" value="value3"/>
<OtherNestetElements/>
<OtherNestetElements/>
<OtherNestetElements/>
</ContainerElement>
, где key
и value
- простые строки.
<xs:element name="MapEntry">
<xs:complexType>
<xs:attribute name="key" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="ContainerElement">
<xs:complexType>
<xs:sequence>
<xs:element ref="MapEntry" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="OtherNestetElements" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
Какой самый простой способ преобразовать элементы MapEntry
в карту Java (Hash-) с помощью JaxB?
Если бы он поддерживал более простое решение, я бы изменил определение MapEntry
на следующее:
<xs:element name="MapEntry">
<xs:extension base="as:string">
<xs:attribute name="key" type="xs:string" use="required" />
</xs:extension>
</xs:element>
<MapEntry key="key1">value1</MapEntry>
<MapEntry key="key2">value2</MapEntry>
<MapEntry key="key3">value3</MapEntry>
PS1
Я прочитал это:
http://todayguesswhat.blogspot.co.uk/2012/09/jaxb-xsd-to-java-maphashmap-example.html)
Но пример выглядит довольно утомленным, имея ключи и значения в различных элементах. Поэтому я надеюсь, что при таком более четком подходе существует более простое решение.
PS2
Я бы хотел избежать очевидного решения: перебрать список MapEntry
в коде моего приложения и вместо этого получить карту (Hash) непосредственно из JaxB.