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

如何使用XmlParser/XmlSlurper获取XML节点不含子元素的根文本值

问题原因

Groovy 中 XmlSlurper 和 XmlParser 的默认 text() 方法会递归返回当前节点及所有下级子节点的文本内容,所以会把字段当前值和嵌套的<previous>节点的历史值拼接返回,不符合取值需求。

解决方案

1. 使用 XmlSlurper 场景

直接调用节点的 localText() 方法即可只获取当前节点自身的直接文本内容,不会包含子节点文本:

xml.each { it ->
    def PersonId = it.id.text().trim()
    // localText()返回当前节点直接文本的列表,join拼接后去除首尾空白
    def Status = it.person.status.localText().join().trim()
    def PrevStatus = it.person.status.previous.text().trim()

    if (Status && PrevStatus) {
        // 状态已变更,执行对应逻辑
    }
}

2. 使用 XmlParser 场景

手动筛选节点的直接文本内容,过滤掉<previous>这类元素子节点即可:

xml.each { it ->
    def PersonId = it.id.text().trim()
    // 只保留文本类型的子内容,排除元素节点
    def Status = it.person.status.children()
        .findAll { it instanceof String }
        .join()
        .trim()
    def PrevStatus = it.person.status.previous.text().trim()

    if (Status && PrevStatus) {
        // 状态已变更,执行对应逻辑
    }
}

以上方案对所有带<previous>嵌套子节点的字段通用,比如示例中的code字段,只需把取值路径里的status替换为code即可直接复用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:42:01