【发布时间】:2011-10-01 22:13:58
【问题描述】:
我想在不使用正则表达式的情况下从表中获取数据。我很喜欢使用 simplexml 来解析 RSS 提要,并且想知道它是否可以用来从另一个页面抓取表格。
例如。使用 curl 或简单地获取页面 file_get_contents();然后用simplexml抓取内容?
【问题讨论】:
标签: php html parsing simplexml
我想在不使用正则表达式的情况下从表中获取数据。我很喜欢使用 simplexml 来解析 RSS 提要,并且想知道它是否可以用来从另一个页面抓取表格。
例如。使用 curl 或简单地获取页面 file_get_contents();然后用simplexml抓取内容?
【问题讨论】:
标签: php html parsing simplexml
如果这是 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);
?>
【讨论】:
您可以使用 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);
【讨论】:
simplexml_import_dom 的链接和一点点进一步的解释。
它可能取决于一个页面。如果页面是 XHTML(现在大多数网页),那么任何 XML 解析器都应该这样做,否则寻找 SGML 解析器。这里有一个类似的问题,你可能感兴趣:Error Tolerant HTML/XML/SGML parsing in PHP
【讨论】:
我的版本 - 容忍错误和编码问题
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);
【讨论】: