代码如下:
def writer = new StringWriter()
writer = new StreamingMarkupBuilder().bind {
Project(){MyTag('Help Me')}
}
println(writer.toString())
the output would be: <Project><MyTag>Help Me</MyTag></Project>
现在如果我在上面的代码中将“MyTag('help Me')”作为字符串var并想要使用,如下所示
def teststring = "MyTag('Help Me')"
def writer = new StringWriter()
writer = new StreamingMarkupBuilder().bind {
Project(){out<<teststring}
}
println(writer.toString())
the output am getting is: MyTag('Help Me')<Project></Project>
but am expecting: <Project><MyTag>Help Me</MyTag></Project>
对于groovy来说,有人帮助我正确实施或找到上述情况的错误?如果我必须使用除StreamingMarkupBuilder和XmlMarkupBuilder之外的其他类,请告诉我? 请注意,在实际场景中,text变量实际上包含了更多嵌套的子节点。
答案 0 :(得分:0)
你可以这样做;将节点字符串换行到{ -> }
并将其评估为Closure,然后设置委托并调用闭包:
import groovy.xml.*
def nodes = '''MyTag( attr:'help me' ) {
| AnotherTag( 'Help me!' )
|}'''.stripMargin()
println XmlUtil.serialize( new StreamingMarkupBuilder().bind {
Project {
c = Eval.me( "{ -> $nodes }" )
c.delegate = delegate
c()
}
} )
打印哪些:
<?xml version="1.0" encoding="UTF-8"?><Project>
<MyTag attr="help me">
<AnotherTag>Help me!</AnotherTag>
</MyTag>
</Project>
但是,您必须小心,好像nodes
字符串来自系统外部,它可用于执行放入其中的任何代码。
如果您正在获取String中的节点,为什么不让他们改写XML并为您节省工作? ; - )