получить элемент, используя php DomDocument - PullRequest
1 голос
/ 19 декабря 2011

У меня есть следующий HTML-код, и я использую php DomDocument класс, чтобы получить элемент с идентификатором 'nextPageBtn' рядом с тегом сценария.проблема в том, что мой запрос ничего не возвращает (как будто нет элемента с указанным идентификатором).вот HTML-код, который я анализируюкакая-то ошибка, которая не позволяет найти элемент?

1 Ответ

1 голос
/ 19 декабря 2011

Как написано в комментарии, ваш код просто работает без нареканий. Демо: http://codepad.viper -7.com / RUNGOd

Что вы считаете источником проблемы:

Я думаю, что строка 'swfobject.registerObject (' FlashID ')' генерирует какую-то ошибку, которая не позволяет найти элемент?

Едва ли может быть единица, поскольку DOMDocument::loadHTMLFile должен иметь дело со всеми тегами (в противном случае вы получили бы ошибки / предупреждения при загрузке документа. После завершения загрузки DOMDocument нормализовал доступ к данным, поэтому таких проблемы (если нет ошибки в libxml, лежащей в основе библиотеке, но вряд ли для такой общей вещи).

Так какие варианты здесь? Возможно, HTML не тот HTML, о котором вы думаете. Это может произойти, если загрузка HTML не удалась в вашем случае. Проверка на ошибки при загрузке:

error_reporting(~0); ini_set('display_errors', 1);

Также проверьте, что HTML является HTML, который вы думаете после загрузки:

$doc->loadHTMLFile($path);
echo $doc->saveHTML();

, который выведет «источник».

Также проверьте свою версию LIBXML:

printf("LIBXML version: %s\n", LIBXML_DOTTED_VERSION);

LIBXML - базовая библиотека, на которой основан DOMDocument PHP. В зависимости от версии могут быть ошибки, и не все функции работают. Например, функция getElementById не работает с loadHTMLFile / loadHTML с версией 2.6.26, но работает с версией 2.7.7 (используемое вами выражение XPath не затрагивается этими двумя версиями).

Если у вас возникла проблема с кодировкой (исходный файл имеет другую кодировку, отличную от ожидаемой), это будет сложнее определить с помощью предоставленной вами информации. Внутренняя кодировка DOMDocument по умолчанию - UTF-8 в PHP, поэтому установка:

 $doc->encoding='UTF-8';

после загрузки файл выглядит для меня лишним. Возможно, вам следует просто удалить это, чтобы уменьшить код, чтобы легче было найти место, из которого происходит ошибка (как я делал в демо).

...