JSoup没有在html链接中翻译&符号

时间:2011-01-25 12:15:36

标签: java html-parsing jsoup

在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 个答案:

答案 0 :(得分:1)

有三个问题:

  1. 您断言存在bovikatanid参数,而实际上它名为boid

  2. HTML源代码在源代码中使用&而不是&amp;。这在技术上是无效的。

  3. Jsoup以某种方式将&mid解析为|。它应该扫描到;

  4. 要修复#1,你必须自己动手。要修复#2,你必须向有问题的serveradmin报告这个问题(这是他们的错,但是,因为普通的浏览器对此感到宽容,我想谷歌正在这样做以节省带宽)。为了解决#3问题,我向Jsoup家伙报告了an issue,看看他对此有何看法。


    更新:看,Jonathan(Jsoup家伙)修复了它。它将在下一个版本中出现。