Почему мой синтаксический анализатор XML возвращает только одну строку вместо нескольких? - PullRequest
0 голосов
/ 14 августа 2011

У меня проблема с анализом данных XML.Я разделил мою программу на 3 различных файла Java, каждый из которых содержит класс.Одним из них является rssparser.java.Этот файл содержит функцию с именем iterateRSSFeed(String URL), эта функция возвращает строку, содержащую проанализированный тег описания.В моих файлах main.java, где мой основной метод, я называю эту функцию iterateRSSFeed следующим образом:

rssparser r = new rssparser();
String description = r.iterateRSSFeed();

И затем я планирую добавить эту строку в JLabel следующим образом:

JLabel news = new JLabel(description);

, что, очевидно, прекрасно работает, моя программа работает.НО в моем XML-файле больше тегов описания, JLabel содержит только один (1) проанализированный тег описания.Я должен сказать, что мой оператор return в функции iterateRSSFeed «упакован» в цикл for, который в моей голове должен возвращать все теги описания.Но нет.

Пожалуйста, спросите, не очищено ли что-нибудь или показ исходного кода - лучший способ найти решение для моего ответа.Заранее спасибо!:)

1 Ответ

3 голосов
/ 14 августа 2011

Когда Java выполняет оператор return, он покидает метод и не продолжает выполнение цикла.

Если вы хотите вернуть несколько значений из метода, вы должны поместить их в некоторый объектсгруппировать их вместе.Обычно можно использовать List<String> в качестве типа возврата.

Тогда ваш цикл заполнит список, и оператор return (после цикла) может вернуть весь список сразу.

ЕслиВы хотите иметь одну большую строку вместо нескольких, вам нужно объединить их в одну.Проще всего было бы просто использовать метод .toString() в списке, это даст (если вы используете реализации списка по умолчанию) что-то вроде [element1, element2, element3].

Если вам не нравится [,], вы можете просто объединить их:

List<String> list = r.iterateRSSFeed();
StringBuilder b = new StringBuilder();
for(String s : list) {
   b.append(s);
}
String description = b.toString();

Это даст element1element2element3.

Поскольку Java JLabel имеет некоторую элементарную поддержку HTML, вы также можете использовать это для форматирования вашего списка какlist:

List<String> list = r.iterateRSSFeed();
StringBuilder b = new StringBuilder();
b.append("<html><ul>");
for(String s : list) {
   b.append("<li>");
   b.append(s);
   b.append("</li>");
}
b.append("</ul>");
String description = b.toString();

Результат будет <html><ul><li>element1</li><li>element2</li><li>element3</li></ul>, который будет отформатирован JLabel следующим образом:

  • element1
  • element2
  • element3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...