XmlSlurper是Groovy生态中专门用于解析和处理XML数据的工具类,它采用拉式解析模式,不需要一次性将整个XML文档加载到内存,因此在处理大型XML文件时性能和内存占用表现更优。它的语法贴近Groovy的原生风格,使用起来比传统的DOM解析方式更加简洁直观。

XmlSlurper基础使用流程
使用XmlSlurper处理XML数据的基本流程分为三步:创建XmlSlurper实例、解析XML数据、操作解析后的结果对象。下面先展示一个解析XML字符串的基础示例:
import groovy.xml.XmlSlurper
// 待解析的XML字符串
def xmlStr = '''<users>
<user id="1">
<name>张三</name>
<age>25</age>
<email>zhangsan@ipipp.com</email>
</user>
<user id="2">
<name>李四</name>
<age>28</age>
<email>lisi@ipipp.com</email>
</user>
</users>'''
// 创建XmlSlurper实例并解析XML
def slurper = new XmlSlurper()
def result = slurper.parseText(xmlStr)
// 输出根节点名称
println "根节点名称:${result.name()}"
获取XML节点内容与属性
XmlSlurper解析后的结果对象支持通过点号语法直接访问子节点,也可以通过@属性名的方式获取节点属性。以下是获取节点内容和属性的示例:
// 获取第一个user节点的name子节点内容
def firstName = result.user[0].name.text()
println "第一个用户姓名:${firstName}"
// 获取第一个user节点的id属性
def firstUserId = result.user[0].@id.text()
println "第一个用户ID:${firstUserId}"
// 获取所有用户的邮箱
result.user.each { user ->
println "用户${user.name.text()}的邮箱:${user.email.text()}"
}
解析XML文件
除了解析XML字符串,XmlSlurper还支持直接解析本地XML文件,只需要使用parse方法传入文件路径即可。示例如下:
import groovy.xml.XmlSlurper
// 解析本地users.xml文件,文件路径根据实际位置调整
def xmlFile = new File("users.xml")
def slurper = new XmlSlurper()
def result = slurper.parse(xmlFile)
// 遍历所有user节点
result.user.each { user ->
println "ID:${user.@id},姓名:${user.name},年龄:${user.age}"
}
节点筛选与条件查询
XmlSlurper支持结合Groovy的闭包语法对节点进行筛选,实现条件查询的需求。比如查询年龄大于25岁的用户:
import groovy.xml.XmlSlurper
def xmlStr = '''<users>
<user id="1">
<name>张三</name>
<age>25</age>
</user>
<user id="2">
<name>李四</name>
<age>28</age>
</user>
<user id="3">
<name>王五</name>
<age>30</age>
</user>
</users>'''
def slurper = new XmlSlurper()
def result = slurper.parseText(xmlStr)
// 筛选年龄大于25的用户
def adultUsers = result.user.findAll { user ->
user.age.text().toInteger() > 25
}
adultUsers.each { user ->
println "年龄大于25的用户:${user.name.text()},年龄:${user.age.text()}"
}
常见注意事项
- XmlSlurper解析后的节点内容是惰性求值的,只有在调用
text()方法时才会真正获取文本内容,因此不要过早对节点内容做类型转换。 - 如果XML中包含命名空间,需要在创建XmlSlurper实例时设置对应的命名空间感知参数,避免解析出错。
- XmlSlurper不支持修改XML后直接写回文件,如果需要修改XML并输出,建议结合XmlNodePrinter或者StreamingMarkupBuilder使用。
GroovyXmlSlurperXML解析XML数据处理修改时间:2026-06-11 09:27:30