JSoup не переводит амперсанд в ссылки в html

В 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"));
}

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


person Antony    schedule 25.01.2011    source источник


Ответы (1)


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

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

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

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

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


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

person BalusC    schedule 25.01.2011
comment
Отличный обзор кода. Спасибо за поднятие проблемы с JSoup. Хотел бы работать с таким человеком, как вы. - person Antony; 27.01.2011
comment
Спасибо BalusC. Я исправил проблему unescape Jsoup, и она будет доступна в следующем выпуске. - person Jonathan Hedley; 28.01.2011