2013-03-20 47 views
1

對於一個項目,我需要抓取一個頁面(互聯網上的任何頁面)並對其進行處理。我爲此使用simplehtmldom(found here),因爲它很容易並且像魅力一樣工作..主要是...我需要爲某些元素設置類屬性,其中一些元素已經具有類屬性,噸。據this article我發現,你可以添加一個屬性的方式如下:PHP simplehtmldom添加屬​​性

$value = $e->attr['data-role']; 

此,不幸的是,沒有爲我工作。下面的代碼提供這些錯誤:

if(!isset($elem->class)) 
{ 
    $elem->attr['class'] = "classname"; 
} 
else 
{ 
    $elem->class = $elem->class . " classname"; 
} 

Notice: Undefined offset: 2 in simplehtmldom.php on line 483 
Notice: Undefined offset: 2 in simplehtmldom.php on line 488 
Notice: Undefined offset: 2 in simplehtmldom.php on line 494 

這是simplehtmldom如下:

function makeup() 
{ 
    // text, comment, unknown 
    if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); 

    $ret = '<'.$this->tag; 
    $i = -1; 

    foreach ($this->attr as $key=>$val) 
    { 
     ++$i; 
      // skip removed attribute 
     if ($val===null || $val===false) 
      continue; 
/* 483 */ $ret .= $this->_[HDOM_INFO_SPACE][$i][0]; 
     //no value attr: nowrap, checked selected... 
     if ($val===true) 
      $ret .= $key; 
     else { 
/* 488 */  switch ($this->_[HDOM_INFO_QUOTE][$i]) 
      { 
       case HDOM_QUOTE_DOUBLE: $quote = '"'; break; 
       case HDOM_QUOTE_SINGLE: $quote = '\''; break; 
       default: $quote = ''; 
      } 
/* 494 */ $ret .= $key.$this->_[HDOM_INFO_SPACE][$i][1].'='.$this->_[HDOM_INFO_SPACE][$i][2].$quote.$val.$quote; 
     } 
    } 
    $ret = $this->dom->restore_noise($ret); 
    return $ret . $this->_[HDOM_INFO_ENDSPACE] . '>'; 
} 

我有一些麻煩搞清楚爲什麼它不會工作。這篇文章寫完後可能會發生什麼變化嗎?或者我在這裏做錯了什麼?

+0

我們可以在483,488行的'simplehtmldom.php'找到什麼? – MatRt 2013-03-20 12:13:30

+0

@MatRt正如你所看到的,simplehtmldom.php的代碼被粘貼在這裏,並且線條被標記。無論如何,我太快問這個問題(對我感到羞恥)並找到答案。無論如何感謝您的嘗試! – 2013-03-20 12:19:04

回答

2

原來我有點太早問這個問題。我發現this page(API參考),它告訴我們,我們可以使用下面的W3C標準太:

$e->setAttribute ($name, $value) 

所以不是

$elem->attr['class'] = "classname"; 

你可以做

$elem->setAttribute("class","classname"); 

我會如果其他人遇到此問題並錯過API參考頁,請保留問題並予以回答。