xml - 我想在 FreeMarker 中将 XML 作为宏参数传递
问题描述
我有以下 XML
<root
xmlns="urn:hl7-org:v3">
<head>
<leaf>l123</leaf>
</head>
</root>
我有一个主要的 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 模板转换输入消息时发生错误:对于 "${...}" 内容:需要一个字符串或可自动转换为字符串(数字、日期或布尔值)或 "模板输出" 的内容,但这已评估为序列+哈希(包装器:fedom.NodeListModel):==> inp.leaf [在模板“support.ftl”中第 2 行第 3 列]
如果我将字符串传递给支持的 FTL 而不是 XML,则模板可以工作
主文件
<#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>
有用。
推荐阅读
- c++ - MSVC 链接器似乎在没有 `__declspec(dllimport)` 的情况下链接了错误的符号
- html - 如何在html中添加多个链接作为scr
- github-actions - 是否可以在 github 操作中获取语义发布发布的版本?
- powershell - Powershell打开后立即崩溃
- javascript - 使用 yandex 进行反向搜索(javascript)
- javascript - 如何使用未知对象更新 MongoDB
- r - R中的位置缺失值插补
- c# - 当我想在 ASP.NET Core 中将身份添加到我的项目时,我无法添加迁移
- spring-batch - Spring Batch Reading AWS S3 -stepExecutionContext 为空
- python - 如何使用非线性内核加速卷积?