1

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

你们中的任何人都可以告诉我它失败的原因吗?

4

1 回答 1

1

存在三个问题:

  1. 你断言存在一个bovikatanid参数,而它实际上是被调用的boid

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

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

要修复 #1,您必须自己动手。要修复 #2,您必须将此问题报告给有问题的服务器管理员(这是他们的错,但是,由于普通浏览器对此很宽容,我想 Google 这样做是为了节省带宽)。为了解决 #3,我向 Jsoup 人报告了一个问题,看看他对此有何看法。


更新:看,乔纳森(Jsoup 人)已经修复了它。它将在下一个版本中出现。

于 2011-01-25T12:42:30.590 回答