SimpleXML Java – чтение значения в корневом элементе

Я использую SimpleXML для Java для анализа ответа XML на сопоставление классов Java. Тем не менее, я не могу получить эту деталь, работающую с моим устройством Android.

Мой XML-фрагмент выглядит так,

<t:EmailAddresses> <t:Entry Key="EmailAddress1">sip:xxx@abs.com</t:Entry> <t:Entry Key="EmailAddress2">smtp:xxx@abs.com</t:Entry> <t:Entry Key="EmailAddress3">SMTP:xxx@abs.com</t:Entry> </t:EmailAddresses> 

И мое определение класса для EmailAddresses выглядит следующим образом:

  @Root public class EmailAddresses { @ElementList private List<Entry> Entry; public List<Entry> getEntry() { return Entry; } public void setEntry(List<Entry> entry) { Entry = entry; } } 

И мой класс Entry выглядит так,

  @Element public class Entry { @Attribute private String Key; public String getKey() { return Key; } public void setKey(String key) { Key = key; } } 

Когда я разбираю запуск анализатора, я получаю только ключи, а также получаю ошибку «Несколько корневых элементов» при попытке проанализировать все 3 в классе List of Entry.

Может кто-нибудь, пожалуйста, укажите мне в правильном направлении? Благодаря !!

Примечание. Пространство имен XML «t» определено правильно.

Вот некоторые вещи, которые вы должны изменить:

Класс EmailAddresses

 @Root(name = "EmailAddresses") /* 1 */ @Namespace(prefix = "t", reference = "INSERT YOUR REFERENCE HERE!") /* 2 */ public class EmailAddresses { @ElementList(inline = true) /* 3 */ private List<Entry> Entry; // ... } 

Объяснение:

  • /* 1 */ : установить имя элемента (с учетом регистра); Простой делает это по умолчанию, но вы можете убедиться, что это действительно правильно.
  • /* 2 */ : Установить пространство имен и ссылку; Необходимых для t в вашем XML.
  • /* 3 */ : Ввести список; Элемент <t:EmailAddresses> построен из элемента @Root() , все записи следуют как встроенные элементы. В противном случае список создаст еще один элемент в качестве дочернего элемента, завернув его в записи.

Entry класса

 @Root(name = "Entry") /* 1 */ @Namespace(prefix = "t", reference = "INSERT YOUR REFERENCE HERE!") /* 2 */ public class Entry { @Text private String text; /* 3 */ @Attribute private String Key; // ... } 

Объяснение:

  • /* 1 */ : Не используйте @Element здесь, используйте @Root() .
  • /* 2 */ : как № 2 выше.
  • /* 3 */ : Ваша Entry -tags в XML содержит текст (= значение элемента, например «sip: …» ), для этого также требуется сопоставление. Если текст является необязательным, вы можете использовать @Text(required = false) чтобы указать это.

СОВЕТ. Создайте экземпляр вашего списка, заполните его записями и сериализуйте его, например, в файл. Таким образом, вы можете увидеть, соответствует ли соответствие вашим ожиданиям, и где вам нужно внести некоторые исправления.

Не можете ли вы использовать атрибуты для извлечения данных? Вот фрагмент из приложения для чтения RSS-каналов, которое аналогично анализирует XML:

 if (localName.equals("channel")) { /** Get attribute value */ String attr = attributes.getValue("category"); itemList.setTitle(attr); } 
Intereting Posts