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

如何在PHP中用XPath提取指定span文本值?解决代码报错问题

问题描述

现有HTML结构:

<div class="span9" bis_skin_checked="1">
<span id="lbl_aracmarka" style="color:#003366;font-size:Medium;">CITROEN</span></div>

现有PHP代码:

$dom = new DOMDocument();
@$dom->loadHTML($response);
$xpath = new DOMXPath($dom);
echo $xpath->query('//*[@id="lbl_aracmarka"]/following-sibling::text()')->item(0)->nodeValue;

需要提取span标签内的CITROEN文本值,但执行代码时出现如下警告:

Warning: Attempt to read property nodeValue on null in /opt/lampp/htdocs/Indexes/x.php on line 84

请问该如何正确实现需求?

解决方案

当前XPath表达式有误,following-sibling::text()用于查找span标签之后的同级文本节点,但你的HTML中span标签后没有同级文本节点,导致查询结果为null,访问nodeValue触发警告。

以下是两种正确实现方式:

方式一:修正XPath表达式

直接选中目标span节点,再获取其文本内容:

$dom = new DOMDocument();
@$dom->loadHTML($response);
$xpath = new DOMXPath($dom);

// 方案1:获取span节点后读取nodeValue
$targetNode = $xpath->query('//*[@id="lbl_aracmarka"]')->item(0);
if ($targetNode) {
    echo $targetNode->nodeValue;
}

// 方案2:用XPath直接定位span内部的文本节点
$textNode = $xpath->query('//*[@id="lbl_aracmarka"]/text()')->item(0);
if ($textNode) {
    echo $textNode->nodeValue;
}

方式二:使用textContent属性

选中span节点后,通过textContent属性获取文本:

$dom = new DOMDocument();
@$dom->loadHTML($response);
$xpath = new DOMXPath($dom);

$targetNode = $xpath->query('//*[@id="lbl_aracmarka"]')->item(0);
if ($targetNode) {
    echo $targetNode->textContent;
}

添加if ($targetNode)判断是为了避免节点不存在时触发警告,提升代码健壮性。


内容的提问来源于stack exchange,提问作者Mèrcy. Schwartz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:12:35