Если ваш код содержит оператор подавления ошибок (@
), первое, что нужно сделать, это удалить его, чтобы увидеть, действительно ли он вызвал ошибки. В вашем случае это было так. Много. Так много на самом деле, что DOM не смог загрузить контент (по крайней мере, он не показывал бы, когда я пытался вывести файл с saveXML()
). Правильный способ загрузки сломанной HTML с DOM является использование:
libxml_use_internal_errors(TRUE);
$dom = new DOMDocument();
$dom->loadHTMLFile('http://tinyurl.com/35cs96n');
libxml_clear_errors();
Загрузка страницы с loadHTMLFile
сделает DOM использовать модуль HTMLparser который является гораздо более снисходительными о сломанной разметке. И вызовы функций libxml будут держать ошибки от вас.
Что касается XPath, попробуйте @slhck's suggestion. Элементы a не являются прямыми дочерними элементами таблицы. Между ними есть tr и td элементы. Если вы посмотрите на HTML, вы увидите, что элементы а все будут иметь идентификаторы, полученные от самого идентификатора таблицы, так что вы можете запросить их непосредственно
'//a[contains(@id, "SubCategory_SubCategoryDataList")]/@href'
ли 'FOPEN()' включены фантики? Кроме того, я бы рекомендовал отказаться от укороченной ссылки URL, так как это одна лишняя икота, чтобы попасть на страницу, которая может или не всегда доступна. – alex
Не могли бы вы объяснить, что означает «не работает»? Что должно случиться, а это не так? – Oded