使用concat()与XSLT 1.0中的分离器



我正在尝试将月/日期/年元素连接到显示mm/dd/yyyy的单个值,但我找不到在XSLT中找到它的方法1.0将以XSLT 2.0中的字符串加入函数的方式包含'/'分离器。我需要在不创建新模板或使用变量/if-Logic的情况下执行此操作,因为我们还没有在我的班上"学到"。我正在尝试连接的代码部分看起来像这样:

<publishedDate>
<month>7</month>
<day>9</day>
<year>2007</year>
</publishedDate>

目前我能做的最好的是:

<xsl:value-of select="concat(
format-number(publishedDate/month, '##00', 'date'),
format-number(publishedDate/day, '##00', 'date'),
format-number(publishedDate/year, '####', 'date')
)"/>

输出这样的日期:03082014

与此同时,出于作业的目的,我被迫使用一个丑陋的,冗长的解决方法,看起来像这样:

<xsl:value-of select="format-number(publishedDate/month, '##00', 'date')"/>/
<xsl:value-of select="format-number(publishedDate/day, '##00', 'date')" />/
<xsl:value-of select="format-number(publishedDate/year, '####', 'date')" />

正确输出(即03/08/2014)。你们知道通过使用1.0函数来获取此输出的一种方法吗?谢谢!

你快到了。您只需要在concat()本身中添加包含'/'的额外参数(它仍然是XSLT 1.0-您可以拥有三个以上的术语):

concat(format-number(...), '/', format-number(...), '/', format-number(...))

xpath 2.0(XSLT 2.0中包含)将支持使用 string-join($sequence, $seperator) 的常规解决方案:

string-join((
    format-number(publishedDate/month, '##00', 'date'),
    format-number(publishedDate/day, '##00', 'date'),
    format-number(publishedDate/year, '####', 'date')
  ), '/')

这对于连接任意长度序列尤其重要,这在xpath 1.0中是不可能的。

您只想结合固定数量的字符串(使用XPath 1.0/XSLT 1.0提供的concat(...))完全很好:

concat(
  format-number(publishedDate/month, '##00', 'date'),
  '/',
  format-number(publishedDate/day, '##00', 'date'),
  '/',
  format-number(publishedDate/year, '####', 'date')
)

相关内容

  • 没有找到相关文章

最新更新