0

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

例如:

资源:

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

查询的输出应该是1 minute, 20 seconds

4

1 回答 1

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

于 2014-08-27T17:41:48.477 回答