用 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>' ' '/>