用 Freemarker 中的替换计数索引替换 <li> 元素
Replace <li> element with replace count index in Freemarker
我需要用 Freemarker 中的计数索引(如 1、2、3 等)替换 <li>
。
示例代码如下:
<li>some text in list item one</li>
<li>some text in list item two</li>
<li>some text in list item three</li>
预期结果需要像下面的代码一样 -
1 some text in list item one
2 some text in list item two
3 some text in list item three
我试过替换功能,但它只会用单个值替换所有 <li>
。
${content?replace('<li>','-')}
要正确执行此操作,您需要一个 HTML 解析器(如 JSOUP),或者更好的是,一些可以将 HTML 转换为纯文本的库。然后你必须将该工具暴露给模板等
但是,问题是,如何用它的序号替换一些东西。您必须为此编写一个宏:
<#-- Prints 1st parameter with replacements, inserting the ordinal of replacement before each. -->
<#macro printWithNumberedReplacements s replaced replacement>
<#local unprintedIdx = 0>
<#list 1..10000000 as ordinal>
<#local liIdx = s?index_of(replaced, unprintedIdx)>
<#if liIdx == -1>
${s[unprintedIdx ..]}<#t>
<#break>
<#else>
${s[unprintedIdx ..< liIdx]}${ordinal}${replacement}<#t>
<#local unprintedIdx = liIdx + replaced?length>
</#if>
</#list>
</#macro>
然后:
<@printWithNumberedReplacements content '<li>' ' '/>
我需要用 Freemarker 中的计数索引(如 1、2、3 等)替换 <li>
。
示例代码如下:
<li>some text in list item one</li>
<li>some text in list item two</li>
<li>some text in list item three</li>
预期结果需要像下面的代码一样 -
1 some text in list item one
2 some text in list item two
3 some text in list item three
我试过替换功能,但它只会用单个值替换所有 <li>
。
${content?replace('<li>','-')}
要正确执行此操作,您需要一个 HTML 解析器(如 JSOUP),或者更好的是,一些可以将 HTML 转换为纯文本的库。然后你必须将该工具暴露给模板等
但是,问题是,如何用它的序号替换一些东西。您必须为此编写一个宏:
<#-- Prints 1st parameter with replacements, inserting the ordinal of replacement before each. -->
<#macro printWithNumberedReplacements s replaced replacement>
<#local unprintedIdx = 0>
<#list 1..10000000 as ordinal>
<#local liIdx = s?index_of(replaced, unprintedIdx)>
<#if liIdx == -1>
${s[unprintedIdx ..]}<#t>
<#break>
<#else>
${s[unprintedIdx ..< liIdx]}${ordinal}${replacement}<#t>
<#local unprintedIdx = liIdx + replaced?length>
</#if>
</#list>
</#macro>
然后:
<@printWithNumberedReplacements content '<li>' ' '/>