2011-03-08 76 views
1

我想用simple_html_dom.php做一些工作。關於`file_get_html`的2個問題

$html = file_get_html('http://www.domain.com'); 
foreach($html->find('p') as $element) { 
echo $element; 
} 

我有2個問題。

  1. 如何添加判斷如果failed to open stream:那麼echo 'this is not a valid url';
  2. 如何判斷中是否有p標記,然後echo 'Can not find p tag';

謝謝。

+2

只是一個側面說明(maniators答案似乎就好了!)。我對simple_html_dom的經驗是,使用xpath通常會更好。 – 2011-03-08 19:41:47

+1

無論文件加載/是否正確解析,'file_get_html()'都會返回一個有效的'Simple_HTML_DOM'對象。因此,@ maniator的答案是不正確的。錯誤消息將永遠不會出現。 – 2011-03-08 19:59:04

回答

0

試試這個:

$html = file_get_html('http://www.domain.com') or die('this is not a valid url'); 
$p = $html->find('p'); 
if(count($p) <=0){ 
    die('Can not find p tag') 
} 
foreach($p as $element) { 
echo $element; 
} 
+1

-1:'file_get_html()'返回一個有效的'Simple_HTML_DOM'對象,無論文件加載/是否正確解析。你永遠不會得到你的錯誤信息。 – 2011-03-08 19:53:27

+0

你可能不會得到第一個,但你會得到第二個不真實的 – Neal 2011-03-08 19:58:27

+0

。我曾多次用過這種方式。尤其是在調用mysql_query()...或者die(...)時 – Neal 2011-03-08 20:02:21

3

這與Simple_HTML_DOM問題的一部分... file_get_html()總是返回一個有效的對象,無論是否加載失敗或沒有。創建你自己的實例也沒有幫助...沒有實際的方法知道你的文件是否正確解析。

至於找出如果你真的在你的結果<p>元素:

$pTags = $html->find('p'); 

if(empty($pTags)) { 
    echo 'Cannot find p tag'; 
} else { 
    foreach($pTags as $element) { 
    echo $element; 
    } 
} 

總體來說,我會建議下探Simple_HTML_DOM和你的代碼遷移到phpQuery,而不是(在加方,phpQuery不做它自己的解析,它只是PHP的DOMDocument類的包裝)。該API更精簡,並讓您知道解析是否成功。

try { 
    $html = phpQuery::newDocument($sourceCode); 

    $pTags = $html->find('p'); 

    if(empty($pTags)) { 
    echo 'Cannot find p tag'; 
    } else { 
    foreach($pTags as $element) { 
     $element = pq($element); // Wrap raw DOMNode in phpQuery object instance; 
     echo $element->html(); 
    } 
    } 
} catch(Exception $ex) { 
    echo $ex->getMessage(); 
} 
+1

也許這可能是有幫助的:http://stackoverflow.com/questions/3458697/php-handle-errors – JoeSlav 2011-03-08 19:44:59

+0

@JoeSlav:這是一個解決方法,如果URL返回的數據不是HTML(即:二進制文件) ,你仍然會得到一個'Simple_HTML_DOM'實例,這將是無用的。 – 2011-03-08 19:48:43

0
$html = new Simple_html_dom(); 
$ipaddrss='write your url here'; 
$html = file_get_html($ipaddrss); 
$anchor=$html->find('dd[class=count]');//you can find the tags with its attributes like 
//shown here 
if($anchor) { 
    echo $anchor; 
} else { 
    echo "sorry! no tags found"; 
} 
+0

你可以解釋一下代碼嗎? – cereallarceny 2012-10-29 00:43:58