【问题标题】:I want to pass an XML as a macro parameter in FreeMarker我想在 FreeMarker 中将 XML 作为宏参数传递
【发布时间】:2021-07-07 09:42:36
【问题描述】:

我有以下 XML

<root
    xmlns="urn:hl7-org:v3">
    <head>
        <leaf>l123</leaf>
    </head>
</root>

我有一个主 FTL 文件

Main.ftl

<#ftl ns_prefixes={"D":"urn:hl7-org:v3"}>
<#import "support.ftl" as aux/>
<@aux.support inp=inputXML["D:root"].head/>

以及带有宏的支持文件

<#macro support inp>
${inp.leaf}
</#macro>

当我运行这些时,我收到以下错误

使用 FreeMarker 转换输入消息时出错 模板:对于“${...}”内容:需要一个字符串或其他东西 自动转换为字符串(数字、日期或布尔值),或 “模板输出”,但这已评估为序列+哈希 (包装器:f.e.dom.NodeListModel): ==> inp.leaf [在模板“support.ftl”中第 2 行第 3 列]

如果我将字符串传递给支持的 FTL 而不是 XML,则模板可以工作

Main.ftl

<#ftl ns_prefixes={"D":"urn:hl7-org:v3"}>
<#import "support.ftl" as aux/>
<@aux.support inp=inputXML["D:root"].head.leaf/>

以及带有宏的支持文件

<#macro support inp>
${inp}
</#macro>

这只是一个例子,我的 XML 很大,而且我有很多支持的 FTL,所以我想传递 XML 而不是传递字符串并创建很多参数。

我该怎么做?

谢谢

【问题讨论】:

    标签: xml freemarker


    【解决方案1】:

    找到了解决办法。

    这可以通过制作不带参数的宏来实现。

    如果宏中没有参数,则传递完整的 XML。

    所以如果我的宏如下:

    <#macro support >
    ${inputXML["D:root"].head.leaf}
    </#macro>
    

    它有效。

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多