我在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有什么问题?
答案 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),':','')))
这会将20140730235959
与20140830000000
答案 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)。