如果我有代码(如不起作用):
def value = element.getAttribute("value")
Binding binding = new Binding();
binding.setVariable("valueExpression", value);
def interpolatedValue = new GroovyShell(binding).evaluate("return valueExpression")
println ("interpolated Value = $interpolatedValue")
,xml属性的值为“时间为$ {new Date()}”
如何让Groovy在运行时评估此表达式?
使用上面的代码,我得到“时间是$ {(新日期()}”而不是评估....
感谢您的任何想法......
答案 0 :(得分:0)
嗯。首先,我尝试使用内联xml作为Michael。但看起来,groovy可以正确地将它们视为GString。
所以,我已经使用其他方式管理了工作:Templates
def xml = new XmlSlurper().parse("test.xml")
def engine = new groovy.text.SimpleTemplateEngine()
def value = xml.em."@value".each { // iterate over attributes
println(engine.createTemplate(it.text()).make().toString())
}
的test.xml
<root>
<em value="5"></em>
<em value='"5"'></em>
<em value='${new Date()}'></em>
<em value='${ 5 + 4 }'></em>
</root>
<强>输出强>
5
"5"
Wed Feb 26 23:01:02 MSK 2014
9
对于纯Groovy shell解决方案,我认为我们可以将表达式包装在其他"
中,但我还没有得到任何解决方案。
答案 1 :(得分:0)
您还可以使用以下代码:
def value = element.getAttribute("value")
Binding binding = new Binding()
binding.setVariable("valueExpression", "\"$value\"")
binding.setVariable("a", 10)
binding.setVariable("b", 20)
def interpolatedValue = new GroovyShell(binding).evaluate(
"return evaluate(valueExpression)")
println ("interpolated Value = $interpolatedValue")
我正在使用以下元素测试上面的代码:
The time is ${new Date()} and $a + $b is ${a+b}
结果是:
interpolated value = The time is Wed Feb 26 10:00:00 2014 and 10 + 20 is 30