PHP读取HTML并处理双重ID外观

时间:2019-04-14 13:02:43

标签: php html parsing get id

对于我的项目,我正在阅读一个使用两次相同ID的外部网站。我无法更改。

我需要第二次显示该ID的内容,但是我的代码仅生成第一个,而看不到第二个。 同样,对$data的计数结果为1,但结果为2。 我很绝望。有人知道如何访问第二个ID“小时”吗?

<?PHP
  $url = 'myurl';
  $contents = file_get_contents($url);
  $dom = new DOMDocument();
  libxml_use_internal_errors(true);
  $dom->loadHTMLFile($url);
  $data = $dom->getElementById("hours");
  echo $data->nodeValue."\n";
  echo count($data);
?>

1 个答案:

答案 0 :(得分:2)

正如@rickdenhaan指出的那样,getElementById始终返回单个元素,这是第一个具有特定值id的元素。但是,您可以使用DOMXPath查找具有给定id值的所有节点,然后挑选出所需的节点(在此代码中将找到第二个节点):

$url = 'myurl';
$contents = file_get_contents($url);
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTMLFile($url);
$xpath = new DOMXPath($dom);
$count = 0;
foreach ($xpath->query("//*[@id='hours']") as $node) {
    if ($count == 1) echo $node->nodeValue;
    $count++;
}

@NigelRen在注释中指出,您可以通过直接选择XPath中的第二个输入来进一步简化此操作。

$node = $xpath->query("(//*[@id='hours'])[2]")[0];
echo $node->nodeValue;

Demo on 3v4l.org