我们有一个使用Groovy SimpleTemplateEngine生成文本文档的应用程序。输入是解析的XML文档,我们通常可以从模板中的表达式引用任何这些字段:
def xml = new XmlParser().parseText(xmldocument)
def engine = new SimpleTemplateEngine()
def script = new File(template_file).text
def vars = [xml: xml, ... ]
output = engine.createTemplate(script).make(vars).toString()
在模板脚本中,我们使用Groovy表达式语法引用XML文档中的元素:Hello ${xml.FirstName}
(假设" FirstName"是上面解析的XML的一部分)。
我们遇到的问题是理解在引用XML数组中的项时使用的语法。例如,我们有这样的XML:
<Contact>
<Name>111</Name>
<Phone>111</Phone>
</Contact>
<Contact>
<Name>222</Name>
<Phone>222</Phone>
</Contact>
模板文件中表达式的语法是什么,让我们引用(比如说)第二个联系人的姓名和电话?我们尝试了${xml.Contact[1].Name}
的变体,但这似乎无法奏效。
答案 0 :(得分:1)
给定xml(已更正为</Phone>
关闭标记:
def xmldocument = '''<Contacts>
| <Contact>
| <Name>111</Name>
| <Phone>111</Phone>
| </Contact>
| <Contact>
| <Name>222</Name>
| <Phone>222</Phone>
| </Contact>
|</Contacts>'''.stripMargin()
def xml = new XmlParser().parseText(xmldocument)
模板:
def script = 'Hello ${xml.Contact[1].Name.text()}'
然后你可以这样做:
import groovy.text.*
def engine = new SimpleTemplateEngine()
def vars = [xml: xml]
output = engine.createTemplate(script).make(vars).toString()
和
assert output == 'Hello 222'
将通过