2016-11-07 3 views
-4

Я пытаюсь использовать parse xml данные с помощью jsoup. Я помещаю все данные в array list. Он уже работает, однако, когда я получаю data, каждый data идет в одну строку. Например, данные, которые я получаю от этос помощью jsoup get xml data

RESULT 
    ITEM 
    R1 
     B DESC ="" 
     B1 
     C DESC ="" 
     CR1 
      C1 
     CR2 
      C1 
     CR3 
      C1 

И мой Java-код

List<Object> list = new ArrayList<>();    
Elements elements = document.select("ITEM"); 
for (Element element : elements) { 
    medicationBasic = new MedicationBasic(); 
    medicationBasic.setProductName(element.select("B1").text()); 
    medicationOrigin = new MedicationOrigin(); 
    medicationOrigin.setMedOrigin(element.select("C1").text()); 
    list.add(medicationBasic); 
    list.add(medicationOrigin); 
    response = new ResponseList(Result.SUCCESS, (ArrayList) list); 

, что я получаю:

{ 
productName:"B1", 
medOrigin:"C1(from CR1) C1(from CR2) C1(from CR3)" 
} 

что ожидается:

{ 
productName:"B1", 
medOrigin:"C1(from CR1)" 
} 

{ 
productName:"B1", 
medOrigin:"C1(from CR2)" 
} 

{ 
productName:"B1", 
medOrigin:"C1(from CR3)" 
} 

что не так с моим кодом ?? Пожалуйста, помогите мне в этом ...

+0

Конкретно: отправьте фактические данные xml и фактический (неожиданный) вывод. –

+0

, что имя xml - это фактическая вещь, которую я пытаюсь получить от –

+0

Это разрешено? –

ответ

0

element.select("C1") выбирает все элементы C1 внутри ITEM (возвращает Elements) и text() возвращает combined text:

общественности Строка текста() Получить объединенный текст всех соответствует элементы.

Фикс Итерация над элементами C1 и добавить пары ключ-значение.

Пример кода

String xmlString = "<RESULT>\r\n" + 
     " <ITEM>\r\n" + 
     "  <R1>\r\n" + 
     "   <B DESC =\"\">\r\n" + 
     "    <B1>B1<B1>\r\n" + 
     "   </B>\r\n" + 
     "   <C DESC =\"\">\r\n" + 
     "    <CR1>\r\n" + 
     "     <C1>C1(from CR1)</C1>\r\n" + 
     "    </CR1>\r\n" + 
     "    <CR2>\r\n" + 
     "     <C1>C1(from CR2)</C1>\r\n" + 
     "    </CR2>\r\n" + 
     "    <CR3>\r\n" + 
     "     <C1>C1(from CR3)</C1>\r\n" + 
     "    </CR3>\r\n" + 
     "   </C>\r\n" + 
     "  </R1>\r\n" + 
     " </ITEM>\r\n" + 
     "</RESULT>"; 

Document document = Jsoup.parse(xmlString); 

List<SimpleEntry<String, String>> list = new ArrayList<>(); 

Elements elements = document.select("ITEM"); 
for (Element element : elements) { 
    String medicationBasic = element.select("B1").text(); 
    element.select("C1").forEach(c1Element -> { 
     String medicationOrigin = c1Element.text(); 
     list.add(new SimpleEntry<String, String>(medicationBasic, medicationOrigin)); 

    }); 
} 

System.out.println(list); 

Выход

[B1 =C1(from CR1), B1 =C1(from CR2), B1 =C1(from CR3)] 
+0

спасибо за ответ ... извините, я вас не понял. Где я получаю xml - это веб-сайт ... не из текста ... так что я не могу поместить этот xml в String правильно? –

+0

StringBuilder queryUrl = new StringBuilder(); queryUrl.append ("http://drug.mfds.go.kr/admin/openapi/detailSearch.do?bc="); queryUrl.append (medicationCode); –

+0

Вот почему я ранее просил фактический xml. Просто используйте свой Документ как прежде, соответствующая часть - это обработка элементов C1, как описано в моем ответе. –

0

На будущее, я решил мою проблему, делая, как показано ниже:

List<Object> list = new ArrayList<>();    
Elements bElement = document.select("B DESC"); 
Elements cElement = document.select("C DESC>*"); 
for (Element bElement : elements) { 
    medicationBasic = new MedicationBasic(); 
    medicationBasic.setProductName(element.select("B1").text()); 
    list.add(medicationBasic); 
} 
for (Element cElement : elements) { 
    medicationOrigin = new MedicationOrigin(); 
    medicationOrigin.setMedOrigin(element.select("C1").text()); 
    list.add(medicationOrigin); 
} 
response = new ResponseList(Result.SUCCESS, (ArrayList) list); 

я получил результат, что я ожидаю ed

 Смежные вопросы

  • Нет связанных вопросов^_^