XmlSlurper是Groovy语言内置的XML解析工具,基于SAX解析模式实现,不需要将整个XML文档加载到内存中,解析效率较高,非常适合处理RSS这类结构相对固定但可能存在体积变化的XML数据。RSS格式的XML通常包含channel节点,内部有title、link、item等子节点,每个item对应一条订阅内容,我们需要提取这些节点的信息。

XmlSlurper解析RSS的基本步骤
使用XmlSlurper解析RSS的核心流程分为三步:首先创建XmlSlurper实例,然后解析目标XML内容得到文档对象,最后通过GPath表达式访问对应的节点提取数据。整个过程不需要复杂的配置,代码简洁易读。
准备RSS测试数据
我们先准备一段标准的RSS 2.0格式的XML测试内容,包含频道基本信息和两条订阅条目:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>技术博客订阅</title>
<link>https://ipipp.com/tech-blog</link>
<description>分享最新技术干货</description>
<item>
<title>Groovy基础教程</title>
<link>https://ipipp.com/groovy-basic</link>
<pubDate>Mon, 12 Jun 2023 08:00:00 GMT</pubDate>
</item>
<item>
<title>XML解析技巧汇总</title>
<link>https://ipipp.com/xml-parse-tips</link>
<pubDate>Tue, 13 Jun 2023 09:30:00 GMT</pubDate>
</item>
</channel>
</rss>
编写解析代码
下面是使用XmlSlurper解析上述RSS数据的完整Groovy代码,会提取频道标题、链接以及所有item的标题、链接和发布时间:
import groovy.xml.XmlSlurper
// 定义RSS XML内容,实际场景中可以从网络请求或文件读取
def rssXml = '''<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>技术博客订阅</title>
<link>https://ipipp.com/tech-blog</link>
<description>分享最新技术干货</description>
<item>
<title>Groovy基础教程</title>
<link>https://ipipp.com/groovy-basic</link>
<pubDate>Mon, 12 Jun 2023 08:00:00 GMT</pubDate>
</item>
<item>
<title>XML解析技巧汇总</title>
<link>https://ipipp.com/xml-parse-tips</link>
<pubDate>Tue, 13 Jun 2023 09:30:00 GMT</pubDate>
</item>
</channel>
</rss>'''
// 创建XmlSlurper实例并解析XML
def slurper = new XmlSlurper()
def rssDoc = slurper.parseText(rssXml)
// 提取频道基本信息
def channelTitle = rssDoc.channel.title.text()
def channelLink = rssDoc.channel.link.text()
println "频道标题:${channelTitle}"
println "频道链接:${channelLink}"
// 遍历所有item节点提取内容
rssDoc.channel.item.each { item ->
def itemTitle = item.title.text()
def itemLink = item.link.text()
def itemPubDate = item.pubDate.text()
println "条目标题:${itemTitle}"
println "条目链接:${itemLink}"
println "发布时间:${itemPubDate}"
println "-------------------"
}
代码说明
代码中首先导入了groovy.xml.XmlSlurper类,然后定义了解析用的RSS内容,实际开发中可以将这部分替换为从URL获取或者读取本地文件的内容。通过parseText方法解析XML字符串后得到文档对象,使用GPath表达式可以直接访问节点,比如rssDoc.channel.title就对应RSS中的频道标题节点,text()方法用于获取节点的文本内容。
遍历item节点时使用了each闭包,逐个处理每个订阅条目,提取需要的信息。如果RSS中存在命名空间,还可以在创建XmlSlurper时配置命名空间处理,避免节点访问失败。
注意事项
- XmlSlurper是流式解析,解析完成后不会保留完整的文档结构,如果需要多次访问节点内容,建议使用XmlParser。
- 解析网络上的RSS链接时,需要处理网络请求异常和XML格式错误的情况,建议添加对应的异常捕获逻辑。
- 提取节点文本时如果节点不存在,
text()方法会返回空字符串,不需要额外做空判断。
XmlSlurper的解析性能优于DOM类解析工具,在处理大体积RSS文件时优势明显,适合对性能有要求的场景使用。
XmlSlurperRSSXML解析Groovy修改时间:2026-07-18 11:45:26