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

如何阻止XmlSlurper合并嵌套元素的值?

使用XmlSlurper解析嵌套XML的实用方案

我来帮你搞定这个XmlSlurper解析的问题!针对你给出的XML结构(先把截断的部分补全方便演示),这里有个清晰的Groovy示例,能精准提取所有属性、嵌套元素和文本内容:

完整的XML示例(补全截断部分)

<XML version="1" title="cars" lot="23">
  <Cars>
    <Car year="2012" color="black" engine="2.0L" drivetrain="FWD">
      Hyundai Sonata
      <Condition id="5">
        Excellent
        <Running>Yes</Running>
      </Condition>
    </Car>
    <Car year="2007" color="silver" engine="2.4L" drivetrain="AWD">
      Audi A4
      <Condition id="4">
        Good
        <Running>Yes</Running>
      </Condition>
    </Car>
  </Cars>
</XML>

解析代码示例

def xmlContent = '''上面的XML字符串'''

// 初始化XmlSlurper并解析XML
def xml = new XmlSlurper().parseText(xmlContent)

// 遍历所有Car元素
xml.Cars.Car.each { car ->
    // 获取Car元素的属性
    def year = car.@year.text()
    def color = car.@color.text()
    def engine = car.@engine.text()
    def drivetrain = car.@drivetrain.text()
    
    // 获取Car的车型名称(直接在<Car>标签后的文本内容)
    def model = car.childNodes().find { it instanceof String }?.text().trim()
    
    // 获取Condition相关数据
    def conditionId = car.Condition.@id.text()
    def conditionStatus = car.Condition.childNodes().find { it instanceof String }?.text().trim()
    def isRunning = car.Condition.Running.text()
    
    // 打印提取的信息(也可以存入对象/集合)
    println "车型: $model"
    println "年份: $year, 颜色: $color, 引擎: $engine, 驱动方式: $drivetrain"
    println "车况ID: $conditionId, 状态: $conditionStatus, 是否能运行: $isRunning"
    println "-------------------------"
}

关键解析要点

  • 获取属性:通过元素.@属性名的方式访问,比如car.@year,最后用.text()拿到字符串值
  • 提取直接文本:因为XML元素的直接文本是作为String类型的子节点存在的(和嵌套元素同级),所以用childNodes().find { it instanceof String }定位到文本节点,再取内容并去除空格
  • 访问嵌套元素:直接通过链式调用访问,比如car.Condition.Running就能拿到元素,再用.text()取它的内容

这样运行代码后,就能把每个车辆的所有信息都提取出来啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:08:27