如何从 URL 通过 ID 获取 table?

How to get a table by ID from a URL?

我正在尝试通过其 ID 从特定的 URL 获取 table。我的方法是从 URL 获取原始 HTML,将其转换为 PHP 的可读 DOM,然后通过查询找到 table。

以下代码的结果是 $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";
            }
        }
    }
?>

如何才能在我的页面上成功呈现此 table?


编辑:

我试图获取的 HTML 的片段,直接取自 $html 变量:

<div></div><table class=sortable id=anyid></table>

要继续评论,您可以先隐藏这些错误:

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";
    }
  }
}

Sample Output