Для проекта мне нужно захватить страницу (ЛЮБОЙ страницы в Интернете) и манипулировать ею. Я использую 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] . '>'; }
У меня возникли проблемы с выяснением, почему это не сработает. Это что-то, что могло измениться после написания статьи, или я делаю что-то неправильно здесь?
Оказывается, я слишком рано задавал этот вопрос. Я нашел эту страницу (ссылку API), и она говорит нам, что мы также можем использовать следующий стандарт W3C:
$e->setAttribute ( $name, $value )
Поэтому вместо
$elem->attr['class'] = "classname";
ты можешь сделать
$elem->setAttribute("class","classname");
Я отвечу на вопрос и ответьте, если другие люди натолкнутся на это и пропустит страницу ссылок API.