0
如何将秒转换为分钟:XPath 1.0中的秒数?XPath 1.0:将ss转换为分钟,秒
例如:
源:
<values>
<value>80</value>
<values>
查询的输出应该1 minute, 20 seconds
如何将秒转换为分钟:XPath 1.0中的秒数?XPath 1.0:将ss转换为分钟,秒
例如:
源:
<values>
<value>80</value>
<values>
查询的输出应该1 minute, 20 seconds
使用XPath 1.0运营商div
和mod
(与floor
相结合)。为了说明,下面有一个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
被输出。
@derp你说得对,我没有考虑这个细节。感谢您的发现!我可能会扩展我的答案 - 只要我知道OP是否真的需要拼写出的单词:-)。 – 2014-08-27 17:55:18
这将是一个很好的例子,如何做到这一点:) – 2014-08-27 18:11:26
@Dalek,我编辑了我的答案,包括这个。由于您仅限于XPath 1.0,因此我认为解决方案很难阅读。 – 2014-08-27 18:14:29