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

如何获取QDomElement自身文本而非所有子元素的文本?

实现结论

该需求可以实现,不需要校验标签名,通过判断节点的直接子节点类型就能完成。

核心逻辑

QDomElement::text()默认会递归拼接所有后代节点的文本内容,所以作用在父节点上会拿到所有子节点的文本拼接结果。你只需要自己实现一个取当前元素直接文本内容的工具函数,遍历当前元素的直接子节点,只收集类型为QDomNode::TextNode的节点值即可:

// 工具函数:仅获取元素自身携带的直接文本,不递归子元素
QString getElementDirectText(const QDomElement& elem)
{
    QString text;
    QDomNode childNode = elem.firstChild();
    while (!childNode.isNull()) {
        // 仅收集直接子节点中的文本节点内容
        if (childNode.nodeType() == QDomNode::TextNode) {
            text.append(childNode.nodeValue());
        }
        childNode = childNode.nextSibling();
    }
    // 可选操作:去除XML标签之间的缩进、换行等空白字符
    return text.trimmed();
}

效果验证

  • 作用于示例中的<a>节点:直接子节点只有元素节点和标签之间的空白文本节点,经过trimmed处理后返回空字符串,符合预期。
  • 作用于<b>/<c>/<d>节点:直接子节点就是存储内容的文本节点,会返回对应文本值1/2/3。

补充说明

你观察到的QDomNode::nodeValue()对元素节点返回空是正常的,该方法仅对文本节点、注释节点、属性节点这类携带内容的非元素节点有效,刚好适配上面的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:06:01