【问题标题】:Filtering a multivalued attribute in StringTemplate在 StringTemplate 中过滤多值属性
【发布时间】:2012-11-10 09:16:55
【问题描述】:

我有一个模板,它在不同的地方使用相同的多值属性。我经常发现自己处于这样一种情况,即我想在将模板应用于单个值之前过滤属性。

我可以这样做:

<#col:{c|<if(cond)><# c.Attribute2 #><endif>};separator=\",\"#>

但这不是我想要的,因为输出中有分隔“跳过”条目的分隔符,例如:

2,4,,,6,,4,5,,

我可以修改成

<#col:{c|<if(c.Attribute1)><# c.Attribute2 #>,<endif>};separator=\"\"#>

这几乎没问题,但我在最后一个数字之后得到了一个额外的分隔符,这有时并不重要(通常当分隔符是空格时),但有时会:

2,4,6,4,5,

我有时会这样做:

<#first(col):{c|<if(cond)><# c.Attribute2 #><endif>};separator=\"\"#>
<#rest(col):{c|<if(cond)>,<# c.Attribute2 #><endif>};separator=\"\"#>

但是如果第一个成员不满足条件,这种方法就失败了,那么开头就有一个额外的分隔符:

,2,4,6,4,5

谁能给我一个更好的解决方案?

【问题讨论】:

  • 这是 v3 吗?嗯...也许在 v3 中它并没有使“空”迭代值消失。
  • 我使用的是 .NET 版本 4.0.6.9004

标签: collections filtering stringtemplate


【解决方案1】:

首先,让我指出,我认为您正在尝试在模板中执行逻辑。每当您听到诸如“根据数据根据某些条件过滤我的列表”之类的内容时,可能是时候在模型中计算过滤后的列表然后将其推入。也就是说,在我们首先过滤列表的情况下,这样的事情可能会起作用:

<col:{c | <if(c.cond)>c<endif>}:{c2 | <c2.c.attribute>}>

c2.c 从第一个应用程序访问 c 参数

【讨论】:

    【解决方案2】:

    “ANTLR Guy”的回答对我没有帮助,我找到了另一种解决方法。见Filter out empty strings in ST4

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      相关资源
      最近更新 更多