Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';Jericho解析器解析这个HTML代码吗?_Java_Html Parsing_Jericho Html Parser - Fatal编程技术网

Java 为什么可以';Jericho解析器解析这个HTML代码吗?

Java 为什么可以';Jericho解析器解析这个HTML代码吗?,java,html-parsing,jericho-html-parser,Java,Html Parsing,Jericho Html Parser,我在应用程序中使用jericho解析器来获得一个更轻版本的网页,从中提取一些部分。例如,当我得到这个代码时: <!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="article

我在应用程序中使用jericho解析器来获得一个更轻版本的网页,从中提取一些部分。例如,当我得到这个代码时:

<!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>

应用程序崩溃了…那么,打火机页面有什么问题

在我看来,Jericho解析器可以解析您提供给它的HTML。出现错误是因为您对
getAllegements()
方法返回的内容做出了错误的假设

我承认我只能找到这个方法的Javadoc,而不是您正在使用的单参数重载,因此我必须假设两个方法返回相同的类型,
List
。在您的示例中,HTML中没有
center
元素,因此
getAllegements()
方法应该返回一个空的
列表。它不必在这里返回
ArrayList
List
的任何实现都可以。在本例中,它选择返回一个。这不是一个
ArrayList
,您会得到一个
ClassCastException
,因为您无法将其强制转换为
ArrayList

据我所知,你有两个选择:

  • 首先,您可能不需要返回的列表是
    ArrayList
    。使用
    List
    就足够了。在这种情况下,您应该更换该行

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

    List centerElems=pageSource.getAllegements(HTMLElementName.CENTER);
    
  • 其次,如果确实需要将列表设置为
    ArrayList
    ,则可以根据结果创建
    ArrayList

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

您应该发布异常,否则就很难弄清楚了…使用从Logcat获取的错误消息进行更新您是否没有得到任何类型的堆栈跟踪,或者只是得到了粘贴的内容?
ArrayList<Element> centerElems=(ArrayList<Element>) pageSource.getAllElements(HTMLElementName.CENTER);
List<Element> centerElems = pageSource.getAllElements(HTMLElementName.CENTER);
ArrayList<Element> centerElems = new ArrayList<Element>(pageSource.getAllElements(HTMLElementName.CENTER));