Как написано в комментарии, ваш код просто работает без нареканий. Демо: 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';
после загрузки файл выглядит для меня лишним. Возможно, вам следует просто удалить это, чтобы уменьшить код, чтобы легче было найти место, из которого происходит ошибка (как я делал в демо).