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

使用XmlSlurper解析含base64编码行的XML失败,求错误原因分析

问题原因分析

第一段拆分代码的错误

  • 你直接把root.item.LINE强转为String的时候,Groovy会把所有LINE节点的文本内容直接拼接成一个连续的字符串,中间没有分隔符,拆分的时候自然无法准确分割出每一段独立的base64内容。
  • 你用\\s==作为拆分规则是错误的:base64末尾的==前面没有空格,拆分规则完全匹配不到分隔点,最后得到的List只会有一个拼接后的完整字符串,无法单独操作每个元素。

第二段遍历代码的错误

  • XmlSlurper解析后的root节点是根节点,直接调用root.each遍历的是根节点下的所有子节点,但你没有指定遍历到子节点后取LINE字段,直接引用LINE.@indexNum属于未定义变量,完全找不到对应内容。
  • 你的XML示例里LINE节点根本没有indexNum属性,就算路径写对也取不到该值。

正确实现代码

你不需要手动拆分字符串,直接遍历所有LINE节点取文本即可,示例如下:

import groovy.xml.XmlSlurper
import java.util.Base64

def root = new XmlSlurper().parseText(text)
// 直接收集所有LINE节点的文本内容,得到存储每一段base64的List
List<String> base64List = root.item.LINE*.text()

// 遍历解码示例
base64List.eachWithIndex { encodedStr, index ->
    println "第${index+1}行base64原文:${encodedStr}"
    // 解码操作
    byte[] decodedBytes = Base64.getDecoder().decode(encodedStr)
    String decodedStr = new String(decodedBytes, "UTF-8")
    println "解码后内容:${decodedStr}"
}

如果需要使用索引,直接用遍历序号即可,不需要依赖XML节点的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:00