Простой парсер HTML DOM не обновляется

Я использую простой анализатор HTML DOM для своей собственной системы шаблонов и обнаружил проблему.

Вот моя разметка:

<div class=content>
    <div class=navigation></div>
</div>

Я заменяю div.navigation собственным контентом, например:

$navi= $dom->find("div.navigation",0);
$navi->outertext = "<a class=aNavi>click me!</a>";

работает хорошо - я могу повторить это, но проблема в том, что перед повторением я все еще хочу получить доступ/манипулировать этой ссылкой с помощью синтаксического анализатора, но синтаксический анализатор не найдет ее.

$link = $dom->find("a.aNavi");

вернет ноль :(

Похоже, парсер нужно обновить/обновить после изменения внешнего текста - есть идеи, если это возможно?


person Fuxi    schedule 19.01.2012    source источник
comment
Потому что ваш a.aNavi не в DOM. Это просто какой-то элемент отдельного объекта (или экземпляра).   -  person YuS    schedule 19.01.2012
comment
но это в источнике .. как я могу это исправить?   -  person Fuxi    schedule 19.01.2012
comment
Что такое $dom? Похоже, это не DOMDocument, так как этот класс нет метода find() или свойства outertext.   -  person FtDRbwLXw6    schedule 19.01.2012
comment
@drrcknlsn: я думаю, что OP использует simplehtmldom.sourceforge.net вместо DOMDocument   -  person anubhava    schedule 19.01.2012


Ответы (1)


Я не вижу createElement-подобного метода в справочнике по API, что означает, что либо документация неполным или вы используете неправильный инструмент для работы.

Я предлагаю использовать DOMDocument и DOMDocument::createElement() метод. Однако, если вы твердо намерены использовать Simple HTML DOM Parser, вы можете попробовать этот хак:

$navi = $dom->find('div.navigation', 0);
$navi->outertext = '<a class="aNavi">click me!</a>';
$dom = $dom->save();
$dom = str_get_html($dom);
$link = $dom->find('a.aNavi');
person FtDRbwLXw6    schedule 19.01.2012
comment
да, я уже сделал это, но это грязно :) поскольку я все еще в начале, я думаю, что лучше использовать DOMDocument - спасибо! - person Fuxi; 19.01.2012