PHP читать HTML и обрабатывать двойной идентификатор - PullRequest
0 голосов
/ 14 апреля 2019

Для моего проекта я читаю внешний сайт, который дважды использовал один и тот же идентификатор.Я не могу это изменить.

Мне нужно содержимое со второго появления этого идентификатора, но мой код просто приводит к первому и не видит второго.Также подсчет $data результатов 1, но не 2. Я в отчаянии.У кого-нибудь есть идеи, как получить доступ ко второму идентификатору «часы»?

<?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 Ответ

2 голосов
/ 14 апреля 2019

Как указывает @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;

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...