我想在 FreeMarker 中传递一个 XML 作为宏参数
I want to pass an XML as a macro parameter in FreeMarker
我有以下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>
当我 运行 这些时,我收到以下错误
An error occurred while transforming input message using FreeMarker
template: For "${...}" content: Expected a string or something
automatically convertible to string (number, date or boolean), or
"template output" , but this has evaluated to a sequence+hash
(wrapper: f.e.dom.NodeListModel):
==> inp.leaf [in template "support.ftl" at line 2, column 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传递。
所以如果我的宏如下:
<#macro support >
${inputXML["D:root"].head.leaf}
</#macro>
有效。
我有以下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>
当我 运行 这些时,我收到以下错误
An error occurred while transforming input message using FreeMarker template: For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), or "template output" , but this has evaluated to a sequence+hash (wrapper: f.e.dom.NodeListModel): ==> inp.leaf [in template "support.ftl" at line 2, column 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传递。
所以如果我的宏如下:
<#macro support >
${inputXML["D:root"].head.leaf}
</#macro>
有效。