我在XML存储库Xhive上运行一个简单的Xquery,并且在为日期返回的值时遇到问题:
的Xquery:
for $x in document('')[matches(xhive:metadata(., "docato-name"),"THOCEO")][xhive:metadata(., "docato-type") = 'XML_RESOURCE_TYPE']
return
<file>
<filename>{xhive:metadata($x, "docato-name")}</filename>
<validated>{xhive:metadata($x,"Last Modified")}</validated>
</file>
结果:
<result>
<file>
<filename>THOCEO</filename>
<validated>1375875821721</validated>
</file>
</result>
我希望“上次修改日期”作为格式化日期返回,因为它出现在存储库中:“2013-08-07 12:43:41”不像上面的字符串那样(“1375875821721”)
我已尝试将查询修改为“{xs:date(xhive:metadata($ x,”Last Modified“))}”但这会失败并显示错误:
query:8:19:XQUERY_ERROR_VALUE: casting error, cannot cast '1375875821721' from xdt:untypedAtomic to {http://www.w3.org/2001/XMLSchema}date (FORG0001: Invalid value for cast/constructor.)
任何帮助将“上次修改”日期作为格式化日期返回将非常感谢!
谢谢!
答案 0 :(得分:3)
是的我会说使用xhive:last-modified(...)是最简单的方法,但是如果你真的想使用时间戳,那么这里是我过去使用过的东西:
declare function local:timestamp-to-dateTime($v) as xs:dateTime {
xs:dateTime("1970-01-01T00:00:00-00:00") + xs:dayTimeDuration(concat("PT", $v idiv 1000, "S"))
};
local:timestamp-to-dateTime(number("1375875821721"))
答案 1 :(得分:0)
我不确定该数字代表什么或如何解析它,但您可以尝试使用xhive:last-modified()
代替xs:dateTime
:
<validated>{ xhive:last-modified(fn:document-uri($x)) }</validated>