如何使用 Freemarker 匹配多个节点?

How do you match more than one node using Freemarker?

我的 FreeMarker FTL 代码如下:

<a class="launch" href="${item.target-url}">View Now</a>

我从以下XML中提取了一个片段:

<item>
 <target-url>www.test.com/jimmy</target-url>    
</item>
<item>
 <target-url></target-url>  
</item>
<item>
 <target-url></target-url>  
</item>

我认为这应该有效。

但是当我查看我的 html 页面时,出现以下错误:

尝试使用 FTL 模板转换时出现异常! freemarker.core.NonNumericalException:对于“-”左手操作数:需要一个数字,但这被评估为序列+哈希(包装器:f.e.dom.NodeListModel):==> item.target [在模板中"marketing/widgets/freemarker/newblogpost-update.ftl" at line 31, column 105] ---- 提示:此 XML 查询结果不能用作字符串,因为它必须恰好包含 1 个 XML 节点,但它包含0 个节点。即,构造 XML 查询未找到匹配项。 ---- ---- FTL 堆栈跟踪(“~”表示与嵌套相关):- 失败于:${item.target - url?size != 0} [in template "marketing/widgets/freemarker/newblogpost-update.ftl" 在第 31 行,第 103 列] ----

我认为我收到此错误是因为我的 XML 包含多个不包含数据的节点 ()。我的一些节点可能包含数据,但不是全部。有什么办法可以解决这个问题吗?

你收到一个错误,因为你有 - 登录 XML 标签并且 FreeMarker 将其视为减号:${item.target - key}

所以你必须使用那个结构:

${item["target-url"]}

FAQ