Может ли simplexml использоваться для винтовки через html?
Я хотел бы захватить данные из таблицы без использования регулярных выражений. Мне понравилось использовать simplexml для синтаксического анализа RSS-каналов и хотелось бы знать, можно ли его использовать для захвата таблицы с другой страницы.
Eg. Возьмите страницу с завитой или просто file_get_contents(); затем используйте simplexml для захвата содержимого?
Ответы
Ответ 1
Вы можете использовать функцию 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);
Ответ 2
Если это XHTML - да, это определенно возможно. True XHTML - это просто XML в конце, поэтому он может быть проанализирован с помощью синтаксического анализатора XML.
SimpleXML, однако, принимает только строгий XML. Если вы не можете получить действительный XHTML, это похоже на то, чтобы пронести его через менее строгую библиотеку DOMDocument
, сначала сделайте трюк (источник здесь)
<?php
$html = file_get_contents('http://...');
$doc = new DOMDocument();
$doc->strictErrorChecking = FALSE;
$doc->loadHTML($html);
$xml = simplexml_import_dom($doc);
?>
Ответ 3
Моя версия - толерантна к ошибкам и проблемам с кодировкой
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);
Ответ 4
Это может зависеть от страницы. Если страница находится в XHTML (большинство веб-страниц в настоящее время), то любой анализатор XML должен делать, иначе искать SGML-парсер. Здесь вам может быть интересен аналогичный вопрос: Ошибка толерантного анализа HTML/XML/SGML в PHP