【问题标题】:How do you match more than one node using Freemarker?如何使用 Freemarker 匹配多个节点?
【发布时间】:2016-05-10 03:09:26
【问题描述】:

我的 FreeMarker FTL 代码如下:

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

我正在从以下 XML 中提取一个 sn-p:

<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:对于“-”左侧操作数:需要一个数字,但这评估为序列+哈希(包装器:fedom.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


    【解决方案1】:

    您收到错误是因为您在 XML 标记中有 - 登录,而 FreeMarker 将其视为减号:${item.target - key}

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

    ${item["target-url"]}
    

    FAQ

    【讨论】:

    • 效果很好!我在想这个名字与它有关
    • 你也可以这样写:${item.target\-url}.
    • 也很高兴知道。我要求管理员在命名 XML 元素时不要使用 -。我认为这应该很好用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2011-09-15
    • 1970-01-01
    • 2018-07-03
    • 2014-08-17
    • 2023-03-12
    相关资源
    最近更新 更多