2012-12-14 29 views
0

我正嘗試從Java中的http://www.amazon.com/gp/bestsellers/electronics提取org.w3c.dom.NodeList。下面是我用來顯示在谷歌瀏覽器的JavaScript控制檯後,我的結果XPath語句:使用Java和XPath提取網頁內容

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

上面的語句工作得十分完美,但是當我使用Java的javax.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' 

我錯過了什麼?

+0

嘗試給出完整路徑.... – mtk

回答

0

解決這個問題最終是雙重的:

  1. DocumentFragment我從沒有包括我試圖提取信息讀取;使用完整Document解決了問題
  2. 出於某種原因,在我的XPath語句中大寫HTML標記使我能夠獲取我之後的信息(即xPath.compile("//DIV[@class='zg_itemRightDiv_normal']"))。
1

這可能是因爲您試圖將輸入視爲XML,而它確實是HTML(而不是XHTML)。

您需要先將HTML轉換爲XHTML - 我之前成功使用過TagSoup,但也有其他庫可以做到這一點(JTidy,NekoHTML)。

TagSoup會爲您提供一個SAX解析器,然後您可以將其轉換爲DOM,然後使用XPath進行處理。

+0

TagSoup非常有幫助,謝謝! –