Опция 1 Один из простых способов сделать это с помощью JaxB - определить свой адаптер для элемента Options. Адаптер используется для более или менее превращения любого XML в любой объект и наоборот (пользовательский маршалинг).
@XmlJavaTypeAdapter(OptionsAdapter.class)
public class OptionsAdapter extends extends XmlAdapter<Element, Options> {
@Override
public Element marshal(Options v) throws Exception {
// put your marshaling logic here
}
@Override
public Options unmarshal(Element node) throws Exception {
// put your unmarshaling logic here
}
}
Then in the class holding the options element you will have:
public class ClazzHoldingOptions {
@XmlJavaTypeAdapter(OptionsAdapter.class)
private Options options;
}
Опция 2 EclipseLink имеет функцию отображения элементов с помощью выражений xpath
@XmlPath("AllowUnspecifiedParameters/Header/text()")
private String header;
https://www.eclipse.org/eclipselink/api/2.4/org/eclipse/persistence/oxm/annotations/XmlPath.html
Вариант 3 При чтении кода @ df778899 я думаю, что его решение не оптимально, но оно решает проблему, которую я до сих пор не рассматривал. И когда у вас так много атрибутов, что вы на самом деле не хотите их отображать, или если вы просто не контролируете содержимое XML, не доверяете ему и не хотите вносить изменения. В котором я бы просто отобразил HashMap:
@XmlJavaTypeAdapter(OptionsAdapter.class)
public class OptionsAdapter extends extends XmlAdapter<Element, Options> {
@Override
public Element marshal(Hashmap v) throws Exception {
// put your marshaling logic here
}
@Override
public HashMap unmarshal(Element node) throws Exception {
// put your unmarshaling logic here
}
}
Then in the class holding the options element you will have:
public class ClazzHoldingOptions {
@XmlJavaTypeAdapter(OptionsAdapter.class)
private HashMap options;
}
Резюме. Итак, позвольте мне обобщить плюсы и минусы
Вариант 1. + Стандартный Aproach pure jaxB
+ Хорошо, если у вас есть контроль над собственной схемой XML-файла. Или, если не ожидается, что схема будет меняться каждый месяц.
-Плохо, если схема или XML-файл очень изменчивы.
Вариант 2. + Чрезвычайно прост в использовании. Нет необходимости в адаптерах.
- Снова не оптимальное решение, если ваша схема изменчива.
Требует конкретной реализации JaxB
Вариант 3. -Только хорошо, если у вас есть нестабильный XML для избежания критических изменений.
PS: Единственный случай, когда я использовал бы что-то вроде решения @ df778899, - это крайняя структурная неопределенность того, что будет в XML. Например, если я знаю, что что-то придет в XML, но я не знаю, где именно. PLus это нехватка памяти, вы хотите хранить в памяти все метаданные, относящиеся к вашему xml.