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

如何在XmlSlurper生成的GPathResult上使用XPath提取链接?

在GPathResult中实现目标XPath的查询方法

你可以通过GPath语法直接转换原XPath的逻辑,以下是具体实现方案:

核心查询代码

对应浏览器中的XPath //a[.//div[@class = 'sign-mail-btn-text']],GPath的写法如下:

方式一(兼容所有Groovy版本)

// 假设gPathResult是你已解析好的GPathResult对象
def targetLinks = gPathResult.depthFirst().a.findAll { aNode ->
    // 检查当前a节点下是否存在class为sign-mail-btn-text的div
    aNode.depthFirst().div.any { divNode ->
        divNode.@class == 'sign-mail-btn-text'
    }
}

方式二(Groovy 2.5+ 简洁写法)

Groovy 2.5及以上版本支持**作为递归遍历所有子节点的语法(等价于XPath的//),可以简化代码:

def targetLinks = gPathResult.**/a.findAll { it.**/div.any { div -> div.@class == 'sign-mail-btn-text' } }

提取链接地址

如果需要获取a标签的href属性,直接遍历结果即可:

targetLinks.each { link ->
    println "签名链接: ${link.@href}"
}

额外提示:HTML解析兼容性

由于邮件HTML通常不是严格的XML格式,解析时建议关闭DTD校验和命名空间支持,避免解析报错:

def slurper = new XmlSlurper()
// 关闭外部DTD加载
slurper.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)
// 关闭命名空间支持
slurper.setFeature("http://xml.org/sax/features/namespaces", false)
def gPathResult = slurper.parseText(this.GetNewMessage(folderName))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:48:19