Как получить следующий элемент HTML после комментария XPath? - PullRequest
0 голосов
/ 08 января 2020

Я получаю комментарии в документе HTML от XPath

$xpath = new DOMXPath($doc);

$comments = $xpath->query('//comment()');

foreach ($comments as $comment)
{
    echo $comment->nodeValue.PHP_EOL;
}

Как я могу получить следующий HTML элемент в этом l oop из $comment?

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы можете изменить выражение XPath, чтобы использовать ось following-sibling и сказать, выбрать первый узел после комментария ...

$comments = $xpath->query('//comment()/following-sibling::*[1]');

Если вам нужен комментарий и следующий узел, вы можете сначала получите комментарий, а затем используйте XPath относительно этого комментария, чтобы получить следующий узел ...

$comments = $xpath->query('//comment()');
foreach ($comments as $comment)
{
    echo $comment->nodeValue.PHP_EOL;
    $next = $xpath->query("following-sibling::*[1]", $comment)[0];
    echo $next->nodeValue.PHP_EOL;
}
1 голос
/ 08 января 2020

Элемент, следующий за $comment, является следующим его родным братом. Должен храниться в nextSibling свойстве:

foreach ($comments as $comment)
{
    var_dump($comment->nextSibling);
}
...