Jsoup Element.attr (), возвращающий неожиданное значение (Android) - PullRequest
2 голосов
/ 01 октября 2011

Я использую JSoup для разбора веб-страницы, например this , и превращения ее в два строковых массива, по одному для каждого из текстовых значений элементов (для отображения в ListActivity) и один для ссылок.,Некоторые из этих текстовых значений имеют специальные символы, которые jsoup не может обработать.сначала я использовал:

Document doc = Jsoup.connect(URL).get();
maintable = doc.select(".kader").first();

, чтобы получить элемент для таблицы с содержимым.в другой теме здесь кто-то сказал, что он будет работать с использованием Jsoup.parse (html), поэтому я изменил его на следующее:

Document doc = Jsoup.connect(URL).get();
Document DOC = Jsoup.parse(doc.html());
if(doc.select(".kader") != null){
    maintable = DOC.select(".kader").first();
}

, однако, похоже, это тоже не сработало.поэтому я оставил это как-то позже, чтобы решить (здесь, возможно), но это не моя главная проблема.если я пытаюсь получить массив String со всеми ссылками, отображаемыми в основном контенте, я бы использовал этот метод:

public String[] getTranslationLinks(){
    String[] items = new String[alllinks.size()];
    Element tempelement;
    for(int i = 0;i<items.length;i++){
        tempelement = alllinks.get(i);

        items[i] = tempelement.attr("abs:href");
    }
    return items;
}

, отладчик говорит, что tempelement содержит правильный элемент, но по какой-то причине .attr ("abs: href") не возвращает ссылку в соответствии с запросом.Например, tempelement будет содержать:

<a href="./vertaling.php?id=6518" target="_top" title="">Hoofdstuk 3, tekst A: Herakles de slaaf</a>

, но .attr (abs: href) возвращает "".

Кто-нибудь из вас знает способ решения этих проблем?

1 Ответ

1 голос
/ 01 октября 2011

Лучше всего создать небольшой скомпилируемый и выполняемый фрагмент кода, который демонстрирует вашу проблему - SSCCE Например, когда я создал свой SSCCE на основе моей интерпретации вашей проблемы, он, казалось, работал. Это был код:

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Kader {
   private static final String MAIN_URL = "http://www.latijnengrieks.com/categorie.php?id=120";
   private static final String ALL_LINKS = "a[href]";
   private static Element maintable;

   public static void main(String[] args) {
      Document jsDoc = null;

      try {
         jsDoc = Jsoup.connect(MAIN_URL).get();
         maintable = jsDoc.select(".kader").first();

         Elements alllinks = maintable.select(ALL_LINKS);

         String[] translationLinks = getTranslationLinks(alllinks);

         for (String tLink : translationLinks) {
            System.out.println(tLink);
         }

      } catch (IOException e) {
         e.printStackTrace();
      }
   }

   public static String[] getTranslationLinks(Elements alllinks){
      String[] items = new String[alllinks.size()];
      Element tempelement;
      for(int i = 0;i<items.length;i++){
          tempelement = alllinks.get(i);

          items[i] = tempelement.attr("abs:href");
      }
      return items;
  }
}

И это был вывод:

http://www.latijnengrieks.com/vertaling.php?id=5586
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=6342
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=6159
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5368
http://www.latijnengrieks.com/profiel.php?id=11
http://www.latijnengrieks.com/vertaling.php?id=5371
http://www.latijnengrieks.com/profiel.php?id=11
http://www.latijnengrieks.com/vertaling.php?id=5797
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=6310
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5799
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5776
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5861
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5521
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5622
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5692
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=6367
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5910
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=6011
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5940
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=6009
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5573
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5572
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5778
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5993
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5623
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5642
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=6000
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5798
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=5578
http://www.latijnengrieks.com/profiel.php?id=1
http://www.latijnengrieks.com/vertaling.php?id=6415
http://www.latijnengrieks.com/profiel.php?id=14
...