如何使用Groovy将XML嵌套结构转CSV?现有代码未达预期
SAP网关Groovy脚本:XML转指定格式CSV修复方案
问题说明
给定如下XML输入:
<Root> <Header> <Name>Abc</Name> <HDR>2345</HDR> </Header> <Detail> <Count>2</count> <LSR>25</LSR> </Detail> <Trailer> <Date>222</Date> <year>2012</year> </Trailer> </Root>
需要生成以分号为分隔符的CSV输出:
Abc;2345 2;25 222;2012
原脚本存在解析冗余、节点路径错误、分隔符不匹配等问题,无法得到预期结果,以下是修复后的方案。
修改后的Groovy脚本
import com.sap.gateway.ip.core.customdev.util.Message; import groovy.xml.XmlSlurper; def Message processData(Message message) { def body = message.getBody(java.lang.String) as String; def xml2CsvConverter = new Xml2CsvConverter() message.setBody(xml2CsvConverter.convert(body)) return message } class Xml2CsvConverter { def convert(xmlInput) { // 单次解析XML def content = new XmlSlurper().parseText(xmlInput) // 分别提取各节点子元素文本,用分号拼接成每行 def headerLine = content.Header.children().collect { it.text() }.join(';') def detailLine = content.Detail.children().collect { it.text() }.join(';') def trailerLine = content.Trailer.children().collect { it.text() }.join(';') // 拼接所有行,换行分隔 def csvContent = [headerLine, detailLine, trailerLine].join('\n') return csvContent } }
关键修复点
- 移除冗余的
XmlParser解析,仅用XmlSlurper处理XML,提升效率 - 单独提取
Header、Detail、Trailer三个节点的子元素文本,确保每个节点对应一行 - 将分隔符从逗号改为分号,匹配期望输出格式
- 用列表直接拼接各行内容,逻辑更清晰,避免原脚本中
inject方法的错误使用 - 注:原XML中
<Count>2</count>标签大小写不匹配,XmlSlurper会忽略该差异不影响取值,但建议后续保证XML标签大小写一致
内容的提问来源于stack exchange,提问作者Abbas
相关产品推荐
相关产品推荐

