如何在XPath 1.0中将秒转换为分钟:秒?
例如:
源:
<values>
<value>80</value>
<values>
查询输出应为1 minute, 20 seconds
答案 0 :(得分:4)
使用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
。