You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DOMXPath查询问题:如何判断页面是否含指定内容的<h2>标签

解决DOMXPath判断“History”

存在性并获取后续段落的问题

我来帮你搞定这个DOMXPath的问题!核心问题是你之前的写法没先判断目标

是否存在,直接去取后续段落导致逻辑走不到else分支。我们可以分两步处理:先确认目标

存在,再处理后续内容;不存在则输出静态内容。

假设你的主内容在class为main-content的div里(你可以根据实际的ID/class调整选择器),下面是完整的PHP代码示例:

// 先加载DOM文档(示例代码,根据你的实际场景调整)
$dom = new DOMDocument();
@$dom->loadHTML($htmlContent); // @符号用于忽略解析时的非致命警告,按需取舍
$xpath = new DOMXPath($dom);

// 1. 定位主内容区域,再精准查询包含“History”文本的<h2>
$historyH2 = $xpath->query("//div[@class='main-content']/h2[contains(normalize-space(text()), 'History')]");

// 2. 判断是否找到目标<h2>节点
if ($historyH2->length > 0) {
    // 获取该<h2>后面的第一个同级<p>标签
    $firstParagraph = $xpath->query("following-sibling::p[1]", $historyH2->item(0));
    if ($firstParagraph->length > 0) {
        echo $dom->saveHTML($firstParagraph->item(0));
    } else {
        // 可选:如果<h2>存在但后面没有段落的处理逻辑
        echo "History section has no following paragraph";
    }
} else {
    // 目标<h2>不存在时,输出你的静态内容
    echo "This page doesn't have a History section. Here's your static content...";
}

关键细节说明:

  • normalize-space(text()):用来去除

    文本前后的空格、换行符,避免因为文本里的空白导致匹配失败(比如<h2> History </h2>也能被正确匹配)。

  • following-sibling::p[1]:这个轴选择器专门取当前节点(找到的

    )之后的第一个同级

    元素,确保只获取紧跟的第一个段落。

  • 检查length属性:DOMXPath查询返回的DOMNodeList对象,通过length > 0判断是否找到节点,这是触发else分支的核心前提,之前的写法大概率漏掉了这个检查。

如果你的主内容div用的是ID而非class,把查询语句改成//div[@id='main-content']即可,完全适配你的页面结构。

内容的提问来源于stack exchange,提问作者Gislef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:08:53