我正在尝试将月/日期/年元素连接到显示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')
)