我目前正在翻译文档以作为 XML 导入到另一个系统,这涉及翻译非常非正式的时间表示,例如:
<estimated-time>15 mins<estimated-time>
我需要将其翻译成如下内容:
<tr:estimated_time>00:15:00</tr:estimated_time>
尽管我对 XSLT 非常缺乏经验,但我已经搞砸了标记化、子字符串和各种时间函数,并且无法想出任何东西。
按照 Jirka 的回答,我尝试了以下方法:
<xsl:template match="estimated-time">
<tr:estimated_time>
<xsl:value-of select="time:parseTime(./text(), 'hours')"/>
<xsl:text>:</xsl:text>
<xsl:value-of select="time:parseTime(./text(), 'mins')"/>
<xsl:text>:</xsl:text>
<xsl:value-of select="time:parseTime(./text(), 'seconds')"/>
</tr:estimated_time>
</xsl:template>
<xsl:function name="time:parseTime">
<xsl:param name="testedString"/>
<xsl:param name="lookingFor"/>
<xsl:variable name="tokens" select="tokenize($testedString, ' ')" />
<xsl:variable name="out">
<xsl:choose>
<xsl:when test="$tokens[. = $lookingFor]">
<xsl:variable name="pos" select="index-of($tokens, $lookingFor)-1"/>
<xsl:value-of select="$tokens[$pos]"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>00</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="if (string-length($out)=1) then concat('0', $out) else $out"/>
</xsl:function>
这总是导致:
<tr:estimated_time>00:00:00</tr:estimated_time>
任何帮助将不胜感激。
更新:它有效!我没有发现原始文件中有一些奇怪的换行符,这阻止了它的工作。