错误:java.lang.ClassCastException:org.jsoup.nodes.Document无法强制转换为org.w3c.dom.Node

时间:2013-12-27 12:52:59

标签: java xpath jsoup

我想借助jsoup和xpath从html页面中提取数据。

这是我的java代码: -

import javax.xml.xpath.XPath;

import javax.xml.xpath.XPathConstants;

import javax.xml.xpath.XPathExpression;

import javax.xml.xpath.XPathFactory;


import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.w3c.dom.NodeList;


public class RssFeedRead {


    public static void main(String args[])
    {
        try
        {
         Document doc = Jsoup.connect("http://timesofindia.indiatimes.com/world/china/China-sees-red-in-Abes-WWII-shrine-visit/articleshow/27989418.cms").get();
         String title = doc.title();
         System.out.println(title);

          String exp = "//*[@id='cmtMainBox']/div/div[@class='cmtBox']/div/div[@class='box']/div[@class='cmt']/div/span";

          XPathFactory factory = XPathFactory.newInstance();
          XPath xPath = factory.newXPath();
          XPathExpression expr = xPath.compile(exp);

          NodeList node = (NodeList) expr.evaluate(doc, XPathConstants.NODE);

          for (int i = 0; i < node.getLength(); i++)
          {
              System.out.println(expr.evaluate(node.item(i), XPathConstants.STRING)); 
          }

        }
        catch(Exception e)
        {
            System.out.println(e);
        }

    }

}

发生此错误: -

java.lang.ClassCastException: org.jsoup.nodes.Document cannot be cast to org.w3c.dom.Node

所以帮我解决这个错误

3 个答案:

答案 0 :(得分:2)

我是这里的新生;经过简单的调查,我认为你应该注意两点:

1)您应该将Jsoup文档转换为org.w3c.dom.Document。您可以参考17802445来运行您应下载的代码DOMBuilder

2)我不太了解CMS格式的页面,解析器是否支持此功能?我测试17802445中的代码与其他链接,它的工作原理。 与你的链接我得到一个java.lang.NullPointerException,这表示演员表失败了。 请检查一下。

希望你能解决它!

我的第一个答案。

答案 1 :(得分:1)

请突出显示抛出异常的行,不要忽略堆栈跟踪。

这是有问题的一行:

NodeList node = (NodeList) expr.evaluate(doc, XPathConstants.NODE);

您正在混合两个用于文档解析和处理的API,XPath和JSoup。 XPath表达式不了解JSoup文档,也无法处理它们。

您需要决定要将哪两种API用于特定工作。

答案 2 :(得分:0)

错误很明显:jsoup Document无法转换为w3c节点。

该行应为NodeList node = (NodeList) expr.evaluate(doc, XPathConstants.NODE);

您可能需要将其转换为jsoup节点(如果存在,我不熟悉此API)。

他们在javadoc

中拥有您需要的一切