我使用 HtmlCleaner 2.6.1 和 Xpath 来解析 Android 应用程序中的 html 页面。这里html页面:
-
http://www.kino-govno.com/comments/42571-postery-kapitan-fillips-i-poslednij-rubezh
-
http://www.kino-govno.com/comments/42592-fantasticheskie-idei-i-mesta-ih-obitanija
第一个链接返回文档,没问题。这个地方的第二个链接:
document = domSerializer.createDOM(tagNode);
不返回任何内容。
如果你创建一个没有安卓的简单Java项目。这一切都很好。
这是代码:
String queries = "//div[starts-with(@class, 'news_text op')]/p";
URL url = new URL(link2);
TagNode tagNode = new HtmlCleaner().clean(url);
CleanerProperties cleanerProperties = new CleanerProperties();
DomSerializer domSerializer = new DomSerializer(cleanerProperties);
document = domSerializer.createDOM(tagNode);
xPath = XPathFactory.newInstance().newXPath();
pageNode = (NodeList)xPath.evaluate(queries,document, XPathConstants.NODESET);
String val = pageNode.item(0).getFirstChild().getNodeValue();
这是因为HtmlCleaner将第二个HTML页面的段落包装到另一个<div/>
中,所以它不再是一个直接的子页面。使用 descendent-or-self
轴//
而不是child
轴/
:
//div[starts-with(@class, 'news_text op')]//p