PHP simplehtmldom添加属​​性

时间:2013-03-20 12:08:14

标签: php dom simple-html-dom

对于一个项目,我需要抓住一个页面(互联网上的任何页面)并操纵它。我正在使用simplehtmldom(found here),因为它很容易并且像魅力一样......主要是..我需要为某些元素设置一个类属性,其中一些元素已经具有类属性,一些其中没有。根据我发现的this article,您可以通过以下方式添加属性:

$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] . '>';
}

我在弄清楚为什么它不起作用时遇到了一些麻烦。自文章撰写以来,它是否可能发生了变化,或者我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

原来我问这个问题有点太早了。我找到了this page(API参考),它告诉我们我们也可以使用以下W3C标准:

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

所以而不是

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

你可以做到

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

我会保留问题并回答以防其他人遇到此问题并错过API参考页。