2011-07-02 45 views
0

這可能真的很容易,如果你知道怎麼回事,但我不這樣做,並花費數小時谷歌上搜索之後我不得不問一些「真正」的程序員,因爲我顯然不一。無法獲取XPath來只輸出一些TD的

我似乎無法找到適合我的教程或代碼示例。比方說,我只想輸出「EuroDiesel 10」TR(向下滾動找到它),然後我只需要來自TD編號1和9的數據。我該怎麼做呢?

我還希望將輸出數據添加到帶有日期戳記的SQL DB中,並且每天更新一次。我認爲這可以用Cron Job來完成,這是否正確,並且應該爲每個我希望從中收集數據的價目表創造一份工作,或者我可以在單個腳本中完成這些工作(這些站點是非常不同的)?

首先,我只需要正確的數據。這是我到目前爲止。

<?php 
$dom = new DOMDocument; 
$date = date("j. F, Y"); 
libxml_use_internal_errors(true); 
$dom->loadHTMLFile('http://www3.statoil.com/mar/kbh00438.nsf/UNID/8C81E46A6EC8BA3BC12578C0002FFF5A?OpenDocument'); 
libxml_use_internal_errors(false); 
$xpath = new DOMXPath($dom); 
$aTag = $xpath->query('//p[@class="text"]'); 

foreach($aTag as $val) { 
    echo $date, '', $val->plaintext. "". utf8_decode(trim($val->nodeValue, "")) . "<br />\n"; 
} 
?> 

我希望你們能幫助我了,只是在這裏學習...

謝謝! 藝術

+0

你可以在這裏遇到的主要問題是關於你正在試圖解析HTML文檔,這是沒有很好地形成。即使XML對DOMDocument :: loadHTMLFile不是強制性的,這可能會給DOMXPath類帶來問題。 –

+0

同意!絕對不是一個簡單的HTMl文檔。 – Art

回答

0

至於XPath的,我覺得/html/body/form/table/tbody/tr[normalize-space(td[1]) = 'EuroDiesel 10']/td[position() = 1 or position() = 9]應該做的。然後訪問$val->textContent而不是nodeValue。

+0

謝謝馬丁。我得到一個「意外T_STRING」的錯誤,但我看到的邏輯,所以也許我可以得到它一點點的修改工作。 – Art