我的输入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
import com.sap.gateway.ip.core.customdev.util.Message;
import groovy.xml.*;
def Message processData(Message message) {
def body = message.getBody(java.lang.String) as String;
def ag = new xml2csv()
message.setBody(ag.execute(body))
return message
}
class xml2csv {
def execute(ins) {
//define writer
def writer = new StringWriter()
//parse input
def parsedXml = new XmlParser().parseText(ins)
def content = new XmlSlurper().parseText(ins)
def header = content.Header.children().collect().join(',')
def csv = content.Detail.Trailer.inject(header){ result, row ->
[result, row.children().collect().join(',')].join("n")
}
println csv.toString()
return csv.toString()
}
}
尝试了上面的代码,但没有像我需要的那样输出。
@tim_yates:谢谢你让这个问题变得可读性强!
@Abbas:如果你可以相信你想提取的数据总是在xml树结构的第二层,你可以尝试这样做:
class xml2csv {
def execute(ins) {
new XmlSlurper().parseText(ins)
.children()
.collect { it.children().join(";") }
.join("n")
}
}