2012-01-01 3 views
1

제 응용 프로그램에서 jericho 파서를 사용하여 웹 페이지의 가벼운 버전을 얻고 일부를 추출합니다. 그래서, 예를 들어,이 코드를 얻을 때 :Jericho 파서가이 HTML 코드를 구문 분석 할 수없는 이유는 무엇입니까?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN/" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> </head> <body> <b> <span class="articletitletext">Happy New Year!</span></b> <br> <span class="postedstamp">Posted By <script language="JavaScript" type="text/javascript"> <!-- document.write('<a href="&#32;&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#104;&#114;&#105;&#115;&#46;&#119;&#121;&#109;&#97;&#110;&#64;&#118;&#101;&#114;&#105;&#122;&#111;&#110;&#46;&#110;&#101;&#116;">'); // --> </script>Chris</a> on January 1, 2012</span><br> <br> <span id="intelliTXT"> 

From all of us here at TheForce.net, we wish you and your family a safe and Happy New Year. May the Force be with you in 2012! 

</span></body> </html> 

내가 여리고 파서를 사용하여 다시 한 번 구문 분석하고 싶습니다,하지만 난

ArrayList<Element> centerElems=(ArrayList<Element>) pageSource.getAllElements(HTMLElementName.CENTER); 

을 실행할 때 나는이 예외를 가지고

01-01 10:46:37.518: ERROR/AndroidRuntime(648): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.test.theforce/net.test.theforce.NewsListActivity}: java.lang.RuntimeException: java.lang.ClassCastException: java.util.Collections$EmptyList 

응용 프로그램이 충돌합니다 ... 더 가벼운 페이지의 문제점은 무엇입니까?

+0

당신은 그렇지 않은 경우가 훨씬 더 사랑하는이야, 예외를 게시해야 알아내는 것이 어려워 ... – AHungerArtist

+0

logCat에서 가져온 오류 메시지로 업데이트했습니다. – user1012480

+0

어떤 종류의 스택 추적을 얻지 않습니까, 아니면 붙여 넣은 것을 정확하게 얻을 수 있습니까? – AHungerArtist

답변

2

제리코 파서가 당신이 준 HTML을 분석 할 수있는 것처럼 보입니다. getAllElements() 메서드가 반환하는 내용에 대해 잘못된 가정을했기 때문에 발생한 오류입니다.

나는이 메서드의 zero-argument overload에 대한 Javadoc만을 사용할 수 있음을 인정합니다. 사용하는 하나의 인수가 과부하가 아니므로 두 메서드 모두 동일한 유형 인 List<Element>을 반환한다고 가정해야합니다. 귀하의 예에서는 center 요소가 HTML에 없기 때문에 getAllElements() 메서드는 빈 List<Element>을 반환해야합니다. 여기에 ArrayList<Element>을 반환 할 필요는 없습니다. List<Element>의 구현이 가능합니다. 이 경우 Collections.emptyList()을 반환하기로 선택합니다. 이것은 ArrayList<Element>이 아니며, ArrayList<Element>으로 전송할 수 없으므로 ClassCastException이됩니다. 첫째

  • , 당신은 ArrayList<Element>로 반환 된 목록이 필요하지 않을 수도 있습니다 :

    는 최대한 멀리 볼 수있는 두 가지 옵션이 있습니다. 대신 List<Element>을 사용하면 충분할 수 있습니다. 당신이 정말 ArrayList<Element>로 목록을해야하는 경우이 경우에, 당신은 당신이 결과에서 ArrayList<Element>를 만들 수 있습니다, 둘째

    List<Element> centerElems = pageSource.getAllElements(HTMLElementName.CENTER); 
    
  • 와 라인

    ArrayList<Element> centerElems=(ArrayList<Element>) pageSource.getAllElements(HTMLElementName.CENTER); 
    

    를 교체해야합니다 :

    ArrayList<Element> centerElems = new ArrayList<Element>(pageSource.getAllElements(HTMLElementName.CENTER));