1

プロジェクトでは、ページ (インターネット上の任意のページ) を取得して操作する必要があります。これには 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] . '>';
}

うまくいかない理由が分からなくて困っています。記事が書かれてから変更された可能性がありますか、それともここで何か間違ったことをしていますか?

4

1 に答える 1

2

この質問をするのは少し早すぎたことがわかりました。このページ(API リファレンス)を見つけたところ、次の W3C 標準も使用できることがわかります。

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

だから代わりに

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

できるよ

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

他の人がこれに出くわし、API リファレンス ページを見逃した場合に備えて、質問と回答を続けます。

于 2013-03-20T12:17:57.700 に答える