【问题标题】:Groovy SimpleTemplateEngine and XML array variablesGroovy SimpleTemplateEngine 和 XML 数组变量
【发布时间】:2016-06-24 14:31:28
【问题描述】:

我们有一个使用 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} 的变体,但这似乎不起作用。

【问题讨论】:

    标签: xml templates groovy


    【解决方案1】:

    给定 xml(更正为有 &lt;/Phone&gt; 关闭标签:

    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'
    

    会通过

    【讨论】:

    • 为草率的 XML 道歉,感谢您的快速回复。
    • 您的示例工作 - 这是一件好事,因为您的语法是我们一直期望工作的语法。尽管如此,不幸的是,在调用 createTemplate()我们针对实时数据运行。更多调试工作......
    • 好的,我们找到了问题...我们使用的模板文件中的另一个字段引用了一个恰好嵌入连字符的 XML 变量。由于这些文件是自动生成的,因此在深入了解之前对我们来说并不是那么明显,然后我们看到了这样的表达式:${xml.user-name.FirstName.text()}。将变量名用单引号括起来 - ${xml.'user-name'.FirstName.text() - 似乎可以解决问题。
    • 啊啊啊啊……很高兴你找到了! :-)
    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多