XPath 1.0中的时间字符串比较

时间:2014-07-20 16:37:25

标签: xml xpath xpath-1.0

我在XPath1.0中得到了这个比较:

  

号(子(翻译(翻译(翻译(@酒馆日期,' - '''),':'&# 39;'),'',''),5,4)+ substring(翻译(翻译(翻译(@ pub-date,' - ',''),':',''),'','&# 39),2,3)+子(翻译(翻译(翻译(@酒馆日期,' - '''),':&#39 ;,''),'''),0,2)+ substring(翻译(翻译(翻译(@ pub-date,& #39; - ',''),':',''),'',&# 39;'),9,6))>号(串(转换(转换(平移(@酒馆date2的,' - '''),':''& #39;),'',''),5,4)+ substring(翻译(翻译(翻译(@ pub-date2,' - &#39 ;,''),':',''),'','') ,2,3)+子(翻译(翻译(翻译(@酒馆DATE2,' - '''),':',& #39;'),'',''),0,2)+ substring(翻译(翻译(翻译(@ pub-date2,' - ',''),':',''),'','& #39),9,6))

比较@pub-date@pub-date2。这些字符串具有以下格式:dd-mm-yyyy hh:mm:ss

问题是:@pub-date = "30-07-2014 23:59:59"@pub-date2 = "30-08-2014 00:00:00"@pub-date被认为大于@pub-date2。这个XPath有什么问题?

2 个答案:

答案 0 :(得分:1)

您正在做的是总结日期中的所有数字,因此01-01-0000 23:59:59之类的日期会产生比02-01-0000 00:00:00更高的值。

您需要做的是按照YearMonthDayTime的顺序获取日期字符串,这样您就会得到一个每秒都会更高的数字。

number(concat(substring(@pub-date,7,4),
substring(@pub-date,4,2),
substring(@pub-date,1,2),
translate(substring(@pub-date,12,8),':',''))) >
number(concat(substring(@pub-date-2,7,4),
substring(@pub-date-2,4,2),
substring(@pub-date-2,1,2),
translate(substring(@pub-date-2,12,8),':','')))

这会将2014073023595920140830000000

进行比较

答案 1 :(得分:1)

首先是表达式

translate(translate(translate(@pub-date,'-',''),':',''),' ','') 

可以简洁地写成

translate(@pub-date,'-: ','')

其次,更重要的是,substring()的参数是错误的。如果你想从30072014中拉出Y,M和D,那么你想要(5,4),(3,2)和(1,2),而这个表达式抓住(5,4),(2,3) ),和(0,2)。