我们有要求从这个 LinkeedhashMap 中我们需要创建一个 XMl
[类型:[eq '02',eq '01'],值:[eq '22'],(日期:[ge datetime'2023-02-28T00:00:00'],日期:[le datetime' 2023-03-01T00:00:00')]]
预期产出:
<filter>
<expression>
<leftOperand>Type</leftOperand>
<operator>eq</operator>
<rightOperand>02</rightOperand>
</expression>
<expression>
<leftOperand>Type</leftOperand>
<operator>eq</operator>
<rightOperand>01</rightOperand>
</expression>
<expression>
<leftOperand>Value</leftOperand>
<operator>eq</operator>
<rightOperand>22</rightOperand>
</expression>
<expression>
<leftOperand>Date</leftOperand>
<operator>ge</operator>
<rightOperand>2023-02-28T00:00</rightOperand>
</expression>
<expression>
<leftOperand>Date</leftOperand>
<operator>le</operator>
<rightOperand>2023-03-01T00:00</rightOperand>
</expression>
</filter>
通过XSLT或者Groovy脚本来实现?
我只能提供 Groovy 支持。我不完全清楚你的地图中的数据类型是什么,但如果你的地图是这样的:
Map map = [Type: ["eq '02'", "eq '01'"], Value: ["eq '22'"], Date: ["ge datetime'2023-02-28T00:00:00'"], Date: ["le datetime'2023-03-01T00:00:00'"]]
您可以使用 Groovy 的 StreamingMarkupBuilder 像这样创建您的 XML:
import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
def xmlBuilder = new StreamingMarkupBuilder()
def writer = xmlBuilder.bind {
filter {
map.each { left, ops ->
ops.each {
def (op, right) = it.split()
expression {
leftOperand left
operator op
rightOperand((right =~ /'(.*)'/)[0][1])
}
}
}
}
}
println(XmlUtil.serialize(writer.toString()))