2011-01-25 2 views
1

JSoup에서 다음 테스트 케이스는 통과해야합니다. 그렇지 않습니다.JSoup는 HTML의 링크에서 앰퍼샌드를 번역하지 않습니다.

@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. 당신은 그것을 실제로 boid을 불리는 동안, bovikatanid 매개 변수가 존재가 있다고 주장하고있다.

  2. HTML 소스는 소스에 &amp; 대신 &을 사용하고 있습니다. 이것은 기술적으로 유효하지 않습니다.

  3. 어쨌든 &mid|으로 구문 분석됩니다. ;까지 스캔 했어야합니다.

# 1을 수정하려면 직접해야합니다. 2 번 문제를 해결하려면 문제의 serveradmin에이 문제를보고해야합니다 (평균 브라우저가 용서할 수 없기 때문에 오류가 발생합니다. Google에서 대역폭을 절약하기 위해이 작업을 수행하고 있다고 생각합니다). # 3을 수정하기 위해, Jsoup 녀석에게 an issue을보고했습니다. 그가 이것에 대해 어떻게 생각하는지 봅니다.


업데이트 : 조나단합니다 (Jsoup 사람)를 참조하십시오 그것을 고정했다. 그것은 다음 릴리스에있을 예정입니다.

+1

코드를 잘 검토했습니다. JSoup에 문제를 제기 해 주셔서 감사합니다. 너 같은 사람과 일하는 걸 좋아할거야. – Antony

+1

감사합니다. BalusC. Jsoup 이스케이프 문제를 해결했으며 다음 릴리스에서 사용할 수 있습니다. –

관련 문제