Может ли 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