Jaxb — настраиваемое отображение хэш-карты

#java #xml #jaxb

#java #xml #jaxb

Вопрос:

 <mapdata>
  <media1>
    <name>media1</name>
    <items>
      <key>1</key>
      <width>100</width>
      <height>150</height>
    </items>
    <items>
      <key>2</key>
      <width>100</width>
      <height>150</height>
    </items>
  </media1>
  <media2>
    <name>media2</name>
    <items>
      <key>1</key>
      <width>100</width>
      <height>150</height>
    </items>
  </media2>
</mapdata>
  

Я хочу преобразовать приведенный выше xml в приведенный ниже объект HashMap с помощью JaxB. Пожалуйста, помогите мне в этом.

 public class MapData{
    protected Map<String, Media> mapdata;

}

public class Media {

    private String name;

    private List<MediaDetail> items = new ArrayList<>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<MediaDetail> getItems() {
        return items;
    }

    public void setItems(List<MediaDetail> items) {
        this.items = items;
    }
}
  

Медиа растут, как media1, media2, media3 и т.д.. Из-за непредсказуемых тегов тега media . Я не могу определить, используя имя тега. Мне нужно сопоставить как медиа-тег в качестве ключа и сохранить детали как объект значения, который включает в себя имя и список элементов. Пожалуйста, дайте мне знать, возможно ли это достичь.

Комментарии:

1. У меня нет xsd. Нет

Ответ №1:

Создайте xsd для вас из вашего xml, используя онлайн-источники, такие как here .

Теперь вы можете использовать это для создания pojo. Jaxb генерирует pojo самостоятельно, позже вы можете создать класс так, как хотите, получая поля, а затем устанавливая нужные поля. Если вы используете maven, есть и другие доступные способы создания pojo вместо использования терминала.

Ответ №2:

Это не так просто сделать. Вероятно, вы будете использовать тот MapAdapter или иной тип адаптера.

Вам нужно будет внести изменения в свои .java классы. Ввод некоторых аннотаций.

И даже вам нужно xml будет немного изменить свой.

Тем не менее, я думаю, что вы можете найти все, что вам нужно в этой статье.

Удачи.