可以使用simplexml来搜索html吗?

时间:2011-07-09 15:56:03

标签: php html parsing simplexml

我想从表中获取数据而不使用正则表达式。我很高兴使用simplexml来解析RSS提要,并想知道它是否可以用来从另一个页面中获取表格。

EG。用curl抓取页面或只是file_get_contents();然后使用simplexml来获取内容?

4 个答案:

答案 0 :(得分:32)

您可以使用DOM模块中的loadHTML函数,然后通过simplexml_import_dom将该DOM导入SimpleXML:

$html = file_get_contents('http://example.com/');
$doc = new DOMDocument();
$doc->loadHTML($html);
$sxml = simplexml_import_dom($doc);

答案 1 :(得分:7)

如果这是XHTML - 是的,这绝对是可能的。真正的XHTML最终只是XML,因此可以使用XML解析器进行解析。

然而, SimpleXML只接受严格的XML。如果你无法获得有效的XHTML,那么看起来像是通过不太严格的DOMDocument库来实现这一点(source here):

<?php
  $html = file_get_contents('http://...');
  $doc = new DOMDocument();
  $doc->strictErrorChecking = FALSE;
  $doc->loadHTML($html);
  $xml = simplexml_import_dom($doc);
?>

答案 2 :(得分:2)

我的版本 - 容忍错误和编码问题

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);

答案 3 :(得分:0)

可能取决于页面。如果页面是XHTML(现在大多数网页),那么任何XML解析器都应该这样做,否则就要寻找SGML解析器。以下是您可能感兴趣的类似问题:Error Tolerant HTML/XML/SGML parsing in PHP