XPath 1.0:将ss转换为分钟,秒

时间:2014-08-27 17:06:56

标签: xml xpath xpath-1.0

如何在XPath 1.0中将秒转换为分钟:秒?

例如:

源:

<values>
    <value>80</value>
<values>

查询输出应为1 minute, 20 seconds

1 个答案:

答案 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分钟或几秒钟,则输出正确的复数minutesseconds