Я хотел бы получить данные из таблицы без использования регулярных выражений. Мне понравилось использовать simplexml для синтаксического анализа RSS-каналов и хотелось бы знать, можно ли его использовать для захвата таблицы с другой страницы.
Например. Возьмите страницу с завитой или просто file_get_contents (); затем используйте simplexml для захвата содержимого?
Вы можете использовать функцию loadHTML
из модуля DOM, а затем импортировать DOM в SimpleXML через simplexml_import_dom
:
$html = file_get_contents('http://example.com/'); $doc = new DOMDocument(); $doc->loadHTML($html); $sxml = simplexml_import_dom($doc);
Если это XHTML – да, это определенно возможно. В конце концов, True XHTML – это просто XML, поэтому он может обрабатываться парсером XML.
SimpleXML, однако, принимает только строгий XML. Если вы не можете получить действительный XHTML, похоже, что DOMDocument
через менее строгую библиотеку DOMDocument
будет делать трюк ( источник здесь ):
<?php $html = file_get_contents('http://...'); $doc = new DOMDocument(); $doc->strictErrorChecking = FALSE; $doc->loadHTML($html); $xml = simplexml_import_dom($doc); ?>
Моя версия – толерантна к ошибкам и проблемам с кодировкой
libxml_use_internal_errors(true); $doc = new DOMDocument(); $doc->strictErrorChecking = FALSE; $doc->loadHTML(mb_convert_encoding($this->html_content, 'HTML-ENTITIES', 'UTF-8')); libxml_use_internal_errors(false); $xml = simplexml_import_dom($doc);
Это может зависеть от страницы. Если страница находится в XHTML (большинство веб-страниц в настоящее время), то любой анализатор XML должен делать, иначе искать SGML-парсер. Вот аналогичный вопрос, который может вас заинтересовать: Ошибка Толерантный анализ HTML / XML / SGML в PHP