我试图通过它的ID从特定URL获取一个表。我的方法是从URL获取原始HTML,将其转换为PHP的可读DOM,然后通过查询查找表。
以下代码的结果是$elements
始终为空(长度为0)。
<?php
$c = curl_init('http://www.urlhere.com/');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($c);
if (curl_error($c))
die(curl_error($c));
curl_close($c);
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$elements = $xpath->query("*/table[@id=anyid]");
if (!is_null($elements)) {
foreach ($elements as $element) {
echo "<br/>[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}
?>
如何在我的页面上成功呈现此表?
修改
我想要获取的HTML片段,直接取自$html
变量:
<div></div><table class=sortable id=anyid></table>
答案 0 :(得分:1)
要继续评论,您可以先隐藏这些错误:
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();
此讨论得到了彻底解决here。
然后要应用它,只需将其添加到您的代码中:
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();
$xpath = new DOMXpath($dom);
$elements = $xpath->query("//table[@id='anyid']");
if (!is_null($elements)) {
foreach ($elements as $element) {
echo "<br/>[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}