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

时间:2016-02-01 15:36:27

标签: xml 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:For&#34; - &#34;左手操作数:预期一个数字,但这被评估为一个序列+ hash(包装器:f.e.dom.NodeListModel):==&gt; item.target [在模板&#34; marketing / widgets / freemarker / newblogpost-update.ftl&#34;在第31行,第105列----提示:此XML查询结果不能用作字符串,因为它必须包含1个XML节点,但它包含0个节点。也就是说,构造XML查询没有找到匹配项。 ---- ---- FTL堆栈跟踪(&#34;〜&#34;表示与嵌套相关): - 失败于:$ {item.target - url?size!= 0} [在模板&#34中;营销/部件/ freemarker的/ newblogpost-update.ftl&#34;在第31行,第103栏----]

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

1 个答案:

答案 0 :(得分:1)

您收到错误是因为您在-处签署了XML标记,而FreeMarker将其视为减号:${item.target - key}

所以你必须使用这种结构:

${item["target-url"]}

FAQ