Здесь нет конкретных ответов, только советы по отладке.
Сначала удалите @ из
@$dom->loadHTML($html);
Возможно, здесь вы видите предупреждение, которое может помочь вам отладить проблему. Метод loadHTML не всегда может работать с плохо сформированным HTML. В приведенном вами примере я получил следующее
PHP Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 109 in /Users/alanstorm/Desktop/foo.php on line 7
Если у вас есть для этого возможность, установите расширение tidy и используйте его для получения чистого документа.
Также убедитесь, что в $ html действительно есть строка. Поскольку вы запрашиваете страницу через http, возможно, по какой-то причине ваш IP заблокирован.
С семейством классов / объектов DOMDocument может быть сложно работать, если вы не привыкли иметь дело с полностью «жесткими» объектно-ориентированными интерфейсами.
Здесь необходимо иметь в виду две вещи:
Почти все , возвращенное методом DomDocument, является объектом
Большинство этих объектов не могут быть преобразованы в строку
Таким образом, похоже, что ваш код содержит ошибки при попытке преобразовать DOMNodeList в строку, что означает, что $ e по какой-то причине является NodeList вместо узла.
Попробуйте вместо этого отобразить $ e-> length, чтобы увидеть, есть ли у вас список узлов определенной длины, или итерировать по $ e, чтобы выяснить, что внутри него. Вы также можете добавить эхо '.'; в ваш цикл, а затем подсчитайте точки, чтобы убедиться, что ваш запрос Xpath возвращает что-то ненулевой длины.
Полагаю, ваш запрос xpath возвращает пустой список узлов. Загрузите Firefox xPath Checker и используйте его для запуска вашего запроса xpath к вашему HTML-документу. Это позволит вам быть уверенным, что у вас есть правильный xPath, и тогда вы сможете сосредоточиться на выяснении части PHP. Когда я проверил, используя ваш пример страницы / кода, я получил пустой результат.
Удачи!