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