使用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
相关产品推荐
相关产品推荐

