2015-04-06 44 views
1

我需要从这个下面的代码片段DOM文档来获取href和的nodeValue

<a class="head_title" href="/automotive/pr?sid=0hx">Automotive</a> 

获取的nodeValue和HREF要做到这一点我也做了以下内容:

foreach($dom->getElementsByTagName('a') as $p) { 

    if($p->getAttribute('class') == 'head_title') { 

     foreach($p->childNodes as $child) { 
      $name = $child->nodeValue; 

      echo $name ."<br />"; 
      echo $child->hasAttribute('href'); 
     } 

    } 
    } 

它返回我错误:

PHP Fatal error: Call to undefined method DOMText::hasAttribute() 

任何人都可以请帮我这。

回答

0

hasAttribute是DOMElements的有效方法,但不能将其用于文本节点。你可以检查节点的类型,然后尝试提取值是它不是'文本'节点。下面的代码可以帮助你

foreach($p->childNodes as $child) { 
    $name = $child->nodeValue; 

    echo $name ."<br />"; 
    if ($child->nodeType == 1) { 
     echo $child->hasAttribute('href'); 
    } 
} 

它检查节点是'DOMElement'类型和调用hasAttribute方法,只有当它是一个DOMElement。

+0

@Diptendu ...在做以下编码时:foreach($ dom-> getElementsByTagName('a')as $ p){ 如果($ p-> getAttribute('class')=='head_title' ){ \t \t \t 的foreach \t($对 - >的childNodes为$子){ \t \t \t $ NAME = $儿童安全>的nodeValue; \t \t \t \t \t \t如果($儿童安全>节点类型== 1){ 回声$儿童安全> hasAttribute( 'href' 属性); } \t \t \t \t} \t \t \t}} 它给了我一个空白页 – user3305327 2015-04-06 10:03:48

+0

你看到任何PHP的致命错误?我无法测试这个,因为我没有PHP设置。让我知道如果有什么办法,我可以在一些小提琴上尝试一下。 – Diptendu 2015-04-06 11:16:51

0

是的......我做了改变我的编码如下所示:

foreach($dom->getElementsByTagName('a') as $link) { 
if($link->getAttribute('class') == 'head_title') { 

     $link2 = $link->nodeValue; 
     $link1 = $link->getAttribute('href'); 
     echo "<a href=".$link1.">".$link2."</a><br/>"; 
} 
    } 

而且这对我的作品!