Я работаю с динамическим форматом таблицы xml, состоящим из схемы, в которой указаны имена и типы столбцов, и тега значений, который содержит строки.Упрощенная версия xsd ниже:
<xs:complexType name="data">
<xs:sequence>
<xs:element name="schema" type="schema"/>
<xs:element name="values" type="values"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="schema">
<xs:anyAttribute/>
</xs:complexType>
<xs:complexType name="values">
<xs:anyAttribute/>
</xs:complexType>
И сгенерированный им пример xml:
<data>
<schema firstName="string" lastName="string" age="integer">
<values>
<value firstName="A" lastName="B" age="23"/>
<value firstName="C" lastName="D" age="63"/>
…
</values>
</data>
Данные для генерации xml поступают из списка объектов данных, для нашего примера:
public class Person {
private String firstName;
private String lastName;
private int age;
// getters and setters…
}
В настоящее время я создаю его, добавляя такой код в класс (я использую jaxb для генерации xml):
private static QName FIRST_NAME = new QName("firstName");
private static QName LAST_NAME = new QName("lastName");
private static QName AGE = new QName("age");
private static Map<QName, String> schema;
static {
schema = new HashMap<QName, String>();
schema.put(FIRST_NAME, "string");
schema.put(LAST_NAME, "string");
schema.put(AGE, "integer"):
}
public Map<QName, String> asMap() {
Map<QName, String> map = new HashMap<QName, String>();
map.put(FIRST_NAME, firstName);
map.put(LAST_NAME, lastName);
map.put(AGE, Integer.toString(age)):
return map;
}
public static Map<QName, String> getSchema() {
return schema;
}
И затем делаю это для всех данныхобъект, который будет использоваться для генерации XML.Это работает, хотя я не чувствую, что это лучшее решение.Основная проблема, которую я вижу в этом, заключается в том, что между схемой и значениями нет связи, и если что-то меняется в одном из них, вам нужно помнить, чтобы обновить и другое.Также немного шумно добавлять это ко всем классам.
Может ли кто-нибудь предложить лучший (более чистый / более общий) способ сделать это?Может быть, какой-то хороший способ автоматически генерировать схемы и / или карты значений?Или любое другое предложение ...
(Вероятно, было бы лучше, если бы я мог получить что-то, что работало бы с любым Java-бином без изменения класса, но я в порядке с украшением / добавлением вещей в класс, еслинеобходимо.)
Спасибо