0

我正在尝试org.w3c.dom.NodeList从Java 中的http://www.amazon.com/gp/bestsellers/electronics中提取一个。这是我用来在 Google Chrome JavaScript 控制台中显示结果的 XPath 语句:

$x("//div[@class='zg_itemRightDiv_normal']")

上面的语句完美无缺,但是当我使用 Javajavax.xml.xpathorg.w3c.dom库时,我没有得到任何结果:

XPathExpression expr = xPath.compile("//div[@class='zg_itemRightDiv_normal']");
NodeList productNodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

// In the above productNodes definition, doc is a org.w3c.dom.DocumentFragment

System.out.println(productNodes.getLength()); // prints out '0'

我错过了什么?

4

2 回答 2

1

这可能是因为当输入实际上是 HTML(而不是 XHTML)时,您正试图将输入视为 XML。

您需要先将 HTML 转换为 XHTML——我之前已经成功地使用了TagSoup,但也有其他库可以做到这一点(JTidy、NekoHTML)。

TagSoup 将为您提供一个 SAX 解析器,然后您可以将其转换为 DOM,然后使用 XPath 进行处理。

于 2012-12-14T01:51:50.733 回答
0

这个问题的解决方案最终是双重的:

  1. 我正在阅读的DocumentFragment内容不包括我试图提取的信息;使用完整Document解决了问题
  2. 出于某种原因,在我的 XPath 语句中将 HTML 标记大写允许我获取我想要的信息(即,xPath.compile("//DIV[@class='zg_itemRightDiv_normal']"))。
于 2012-12-18T22:24:50.150 回答