如何在 XPath 1.0 中将秒转换为分:秒?
例如:
资源:
<values>
<value>80</value>
<values>
查询的输出应该是1 minute, 20 seconds
使用 XPath 1.0 运算符div
(结合floor
)和mod
. 为了说明,下面有一个 XSLT 1.0 样式表。详细信息取决于您嵌入 XPath 的环境。
XSLT 样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="values">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="value">
<xsl:copy>
<xsl:value-of select="concat(floor(. div 60),':',. mod 60)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML 输入
<?xml version="1.0" encoding="UTF-8"?>
<values>
<value>80</value>
<value>90</value>
</values>
XML 输出
<?xml version="1.0" encoding="UTF-8"?>
<values>
<value>1:20</value>
<value>1:30</value>
</values>
编辑:正如@derp 所指出的,如果您需要拼出“分钟”和“秒”并区分复数和单数,这将无济于事。这是另一个处理这个问题的版本,恐怕稍微复杂一些。
此外,现在您已经到了仅靠 XPath 很难解决问题的地步。您需要使用使用 XPath 的高级语言。
样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="values">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="value">
<xsl:variable name="mins">
<xsl:value-of select="concat(floor(. div 60),' ')"/>
<xsl:value-of select="concat(substring('minute', 1 div boolean(floor(. div 60) = 1)),
substring('minutes', 1 div boolean(floor(. div 60) != 1)))"/>
</xsl:variable>
<xsl:variable name="secs">
<xsl:value-of select="concat(. mod 60,' ')"/>
<xsl:value-of select="concat(substring('second', 1 div boolean(. mod 60 = 1)),
substring('seconds', 1 div boolean(. mod 60 != 1)))"/>
</xsl:variable>
<xsl:copy>
<xsl:value-of select="concat($mins,',',$secs)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML 输出
<?xml version="1.0" encoding="UTF-8"?>
<values>
<value>1 minute,20 seconds</value>
<value>1 minute,30 seconds</value>
</values>
如果您想知道:如果有 0 分钟或秒,则输出正确的复数minutes
或seconds
。