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

