2011-03-08 79 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