如何在 XPath 评论后获取下一个 HTML 元素?

How to get the next HTML element after a comment by XPath?

我通过 XPath

在 HTML 文档中获得注释
$xpath = new DOMXPath($doc);

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

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

如何从 $comment 获取此循环中的下一个 HTML 元素?

$comment 之后的下一个元素是它的下一个兄弟元素。它应该存储在 nextSibling 属性:

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

您可以更改您的 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;
}