我想在FreeMarker中传递一个XML作为宏参数



我有以下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转换输入消息时出错模板:For"${…}";content:应为字符串或其他内容可自动转换为字符串(数字、日期或布尔值(,或"模板输出",但这已经评估为序列+哈希(包装器:f.e.dom.NodeListModel(:===>inp.leaf[在第2行第3列的模板"support.ftl"中]

如果我将字符串传递给支持的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。

因此,如果我的宏如下:

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

它是有效的。

最新更新