我见过spock,它接受这种语法(所谓的数据表):
a | b | c
1 | 3 | 3
7 | 4 | 4
0 | 0 | 0
让我们在data_table.groovy中说,如何编写DSL以便将上述内容转换为每行的xml:
<a>1</a>
<b>3</b>
<c>3</c>
... other rows
提前致谢。
答案 0 :(得分:1)
您可以使用GroovyTables(免责声明:我是GroovyTables的作者)
创建一个接受闭包参数的方法,使用GroovyTables构造数组列表,然后循环遍历表以创建XML:
my.cnf
然后使用您的新方法:
private String toXml(Closure closure) {
List<Object[]> rows = GroovyTables.createListOfArrays(closure)
Iterator<Object[]> rowsIterator = rows.iterator()
Object[] headingRow = rowsIterator.next()
StringBuilder sb = new StringBuilder()
while (rowsIterator.hasNext()) {
Object[] row = rowsIterator.next()
sb.append("<row>\n")
for (int i = 0; i < row.length; i++) {
sb.append(" <${headingRow[i].name}>${row[i]}</${headingRow[i].name}>\n")
}
sb.append("</row>\n")
}
return sb.toString()
}
将产生:
def xml = toXml {
a | b | c
1 | 3 | 3
7 | 4 | 4
0 | 0 | 0
}
println xml