2012-08-12 64 views
0

我試圖使用以下XPath使用失敗的HtmlUnit

html/body/table/tbody/tr[2]/td/table/tbody/tr[4]/td/table/tbody/tr[1]/td[1]/table/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr[1]/td/h1

從這個馬耳他新聞頁面

http://www.maltarightnow.com/Default.asp?module=news&at=Inawgurat+%26%23289%3Bnien+%26%23289%3Bdid+f%27Marsalforn&t=a&aid=99839603&cid=19

提取標題提取由XPath的內容(是不是漂亮,但這個Xpath是由Chrome生成的,因爲缺少元素ID)。

我使用Java中的HTMLUnit以編程方式提取標題。這是代碼。我使用相同的代碼提取了新聞內容和文章日期(顯然是用不同的xpath)。

public static void main (String[] args) { 
     WebClient webClient = new WebClient(); 
     HtmlPage page = null; 
     try { 
      page = webClient.getPage("http://www.maltarightnow.com/?module=news&at=Inawgurat+%26%23289%3Bnien+%26%23289%3Bdid+f%27Marsalforn&t=a&aid=99839603&cid=19"); 
     } catch (FailingHttpStatusCodeException | IOException e) { 
     } 

     String text = ((DomElement)page.getFirstByXPath("html/body/table/tbody/tr[2]/td/table/tbody/tr[4]/td/table/tbody/tr[1]/td[1]/table/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr[1]/td/h1")).asText(); 
     System.out.println(text); 
    } 

但是它給了提到的XPath空指針在

((DomElement)page.getFirstByXPath("html/body/table/tbody/tr[2]/td/table/tbody/tr[4]/td/table/tbody/tr[1]/td[1]/table/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr[1]/td/h1")).asText();

的一個DOMElement不被發現,我敢肯定它的存在,Chrome瀏覽器創建的XPath畢竟。

這可能是什麼原因造成的?

在此先感謝

回答

0

這並不容易。你應該:

  1. 看到的文字是的HtmlUnit實際上Page.asXml()
  2. 正確的你穿越到任何相匹配的的HtmlUnit的XPath在上一步的提示
+0

謝謝你的輸出創建。其中工作的Xpath實際上是/ html/body/table/tbody/tr [2]/td/table/tbody/tr [4]/td/table/tbody/tr [1]/td [1]/table/tbody/TR/TD /表/ tbody的/ TR/TD [2] /表/表[2]/tbody的/ TR [1]/TD/H1。最後,不是table [3],而是table/table [2]。沒有線索爲什麼Chrome首先給了我第一個Xpath!再次感謝! – 2012-08-13 07:36:23