xml - 将秒转换为持续时间XPATH

标签 xml xpath

如何将以秒为单位的时间转换为Duration字符串,例如:

2 Days 10 Hours 10 Seconds

最佳答案

如果您不介意在输出中看到零,则可以使用整数除法和取模运算将值分为小时,分钟,秒和天:

秒数是输入值的模数60。(丢弃除“秒针”以外的所有内容)

分钟数是输入值除以60,将其截断为整数,然后取60为模。(将秒数重新缩放为分钟,丢弃除“分针”之外的所有内容)

小时数是输入值除以3600(60 * 60),将其截断为整数,然后取模为24。(将秒数重新换算为小时数,依此类推)

天数...您现在应该会看到模式...除以86400(24 * 60 * 60),然后截断为整数。由于我们不会尝试将其分为几个月和几年,因此我们可以在这里停止。

未经测试,但应该可以工作:

concat(floor($NUMSEC div 86400),' Days ',floor($NUMSEC div 3600) mod 24,' Hours ',
  floor($NUMSEC div 60) mod 60,' Minutes ',$NUMSEC mod 60,' Seconds'


其中$ NUMSEC是包含秒总数的XPath变量,或者是返回该整数的XPath表达式。是的,后者效率低下,但这就是您尝试将其作为单个表达式执行的操作。

如果您想抑制显示为零的部分并完全在XPath 1.0中完成它...我认为是可能的,但是坦率地说,这比我想处理的要难看,所以我将其作为练习留给读者。

(XPath 2.0将Duration识别为数据类型,并具有访问Duration组件的功能,因此这是另一种选择。要将整数转换为持续时间,请将其乘以隐含的时间单位,例如PTS1。)

但是:可能并不等于好主意。除非有理由必须在XPath中执行此操作(也许是想使其用作更通用的宏语言?),否则我通常建议仅使用XPath来检索值并以您使用的任何语言进行转换从中启动XPath。

并且,如果您确实确实需要一种表达式语言,该表达式语言既可以格式化数据又可以从XML检索数据,那么我建议您看看是否可以在XQuery上使用爪子。从某种意义上说,XQuery是XPath 2.0的超集,它以查询表达式的形式(而不是XML语法)添加了与XSLT 2.0相同的功能。

关于xml - 将秒转换为持续时间XPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22338972/

相关文章:

ios - iOS 中的 xmpp IQ XML 解析

java - 如何使用 selenium webdriver 验证表中的工具提示消息?

selenium - "//div[.//a[text()=' SELENIUM'] ]"and "//div[//a[text() ='SELENIUM' ]]"在 Selenium xpath中有什么区别

java - 需要转义 java 中 XML 标签(<、>、')之间存在的一些特殊字符

c# - 如何直接从xml获取值(最好使用XPath)?

xml - 使用 XSLT 如何复制特定的 XML 子树

xpath - 用额外的扭曲排除元素之间的节点

xml - 连接 XML

java - 无法在弹出的新窗口中访问框架内的网络元素

python - 类型错误 : Failed to execute 'evaluate' on 'Document' : The result is not a node set,,因此无法通过 Selenium 使用 Xpath 进行转换