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

如何用DOMDocument获取元素不含子元素的主文本

只获取DOM元素的直接文本内容(忽略子元素)

这个场景我太熟悉了!nodeValue确实会把元素下所有子节点的内容一股脑儿拼出来,包括子元素里的文本。要只拿元素直接包含的文本节点,得从节点类型入手,或者用XPath精准筛选。

方法一:遍历子节点筛选文本节点

先拿到目标元素,然后遍历它的子节点,只保留类型为XML_TEXT_NODE(对应数值3)的节点内容:

// 先获取目标span元素
$spanElement = $g->query('//span')[0];
$mainText = '';

// 遍历所有子节点
foreach ($spanElement->childNodes as $childNode) {
    // 只处理文本节点
    if ($childNode->nodeType === XML_TEXT_NODE) {
        // 用trim去掉多余的空白字符,按需调整
        $mainText .= trim($childNode->nodeValue) . ' ';
    }
}

// 清理末尾多余的空格
$mainText = trim($mainText);
echo $mainText; // 输出:This is the main

方法二:用XPath直接定位文本子节点

更简洁的方式是用XPath的text()函数,直接选中目标元素下的所有直接文本子节点:

// 直接获取span下的所有文本子节点
$textNodes = $g->query('//span/text()');
$mainText = '';

foreach ($textNodes as $textNode) {
    $mainText .= trim($textNode->nodeValue) . ' ';
}

$mainText = trim($mainText);
echo $mainText; // 输出:This is the main

补充说明

如果你的元素里有多处直接文本(比如<span>开头<i>子元素</i>结尾</span>),这两种方法都会把所有直接文本节点的内容拼接起来,最终得到“开头 结尾”这样的结果,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:41:22