JSoup не переводит амперсанд в ссылках в HTML - PullRequest
1 голос
/ 25 января 2011

В JSoup должен пройти следующий тестовый пример, но это не так.

@Test
public void shouldPrintHrefCorrectly(){
    String content=  "<li><a href=\"#\">Good</a><ul><li><a href=\"article.php?boid=1865&sid=53&mid=1\">" +
            "Boss</a></li><li><a href=\"article.php?boid=186&sid=53&mid=1\">" +
            "heavent</a></li><li><a href=\"article.php?boid=167&sid=53&mid=1\">" +
            "hellos</a></li><li><a href=\"article.php?boid=181&sid=53&mid=1\">" +
            "Mr.Jackson!</a></li>";

    Document document = Jsoup.parse(content, "http://www.google.co.in/");
    Elements links = document.select("a[href^=article]");
    Iterator<Element> iterator = links.iterator();
    List<String> urls = new ArrayList<String>();
    while(iterator.hasNext()){
        urls.add(iterator.next().attr("href"));
    }

    Assert.assertTrue(urls.contains("article.php?boid=181&sid=53&mid=1"));
}

Может, кто-нибудь из вас объяснит причину сбоя?

1 Ответ

1 голос
/ 25 января 2011

Есть три проблемы:

  1. Вы утверждаете, что присутствует параметр bovikatanid, хотя он на самом деле называется boid.

  2. Источник HTML использует & вместо &amp; в источнике. Это технически неверно.

  3. Jsoup как-то разбирает &mid как |. Он должен был отсканировать до ;.

Чтобы исправить # 1, вы должны сделать это самостоятельно. Чтобы исправить № 2, вы должны сообщить об этой проблеме соответствующему сервадмину (однако, это их вина, поскольку средний браузер прощает это, я думаю, что Google делает это, чтобы сэкономить пропускную способность). Чтобы исправить № 3, я сообщил о проблеме парню из Jsoup, чтобы узнать, что он думает по этому поводу.


Обновление : видите, Джонатан (парень из Jsoup) исправил это. Это будет там в следующем выпуске.

...