如何在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
nodeValueon 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
相关产品推荐
相关产品推荐

