php读取html并处理双id外观

php读取html并处理双id外观,php,html,parsing,get,Php,Html,Parsing,Get,对于我的项目,我正在阅读一个使用相同ID两次的外部网站。我不能改变 我需要该ID第二次出现时的内容,但我的代码只是第一次出现时的结果,没有看到第二次。 另外,计数到$data的结果是1,而不是2。 我绝望了。有人知道如何访问第二个ID“小时”吗 <?PHP $url = 'myurl'; $contents = file_get_contents($url); $dom = new DOMDocument(); libxml_use_internal_errors(true

对于我的项目,我正在阅读一个使用相同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);
?>

正如@rickdenhaan指出的,总是返回一个元素,该元素是第一个具有特定值
id
的元素。但是,您可以使用查找具有给定
id
值的所有节点,然后选择所需的节点(在此代码中,它将找到第二个节点):

正如@NigelRen在评论中指出的,您可以通过直接选择XPath中的第二个输入(即

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

正如@rickdenhaan指出的,总是返回一个元素,该元素是第一个具有特定值
id
的元素。但是,您可以使用查找具有给定
id
值的所有节点,然后选择所需的节点(在此代码中,它将找到第二个节点):

正如@NigelRen在评论中指出的,您可以通过直接选择XPath中的第二个输入(即

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

getElementById
始终返回单个节点。PHP的DOMDocument没有提供一种通过其
id
属性获取多个节点的方法,但是您可以使用
getElementById
编写一个查询,该查询始终返回一个节点。PHP的DOMDocument没有提供通过其
id
属性获取多个节点的方法,但是您可能可以使用XPath编写查询,您可以使用XPath稍微缩短它,只获取第二项-
$node=$XPath->query((/*[@id='hours'])[2]”[0]
echo$node->nodeValue-浏览一下。@NigelRen谢谢你的参考。这确实让它更简单了,我已经用这个选项更新了答案。您可以通过使用XPath只获取第二项来稍微缩短答案-
$node=$XPath->query((/*[@id='hours'])[2]”[0]
echo$node->nodeValue-浏览一下。@NigelRen谢谢你的参考。这确实使它更简单,我已经用这个选项更新了答案。