0

我在 XPath1.0 中有这样的比较:

number(substring(translate(translate(translate(@pub-date,'-',''),':',''),'','') ,5,4)+substring(translate(translate(translate (@pub-date,'-',''),':',''),'',''),2,3)+substring(translate(translate(translate(@pub-date,'-' ,''),':',''),' ',''),0,2)+substring(translate(translate(translate(@pub-date,'-',''),':', ''),'',''),9,6)) > number(substring(translate(translate(translate(@pub-date2,'-',''),':',''),'' ,'') ,5,4)+substring(translate(translate(translate(@pub-date2,'-',''),':',''),' ',''),2,3) +substring(翻译(翻译(翻译(@pub-date2,'-',''),':',''),'',''),0,2)+substring(translate(translate(translate(@pub-date2,'-',''),':','') ,' ',''),9,6))

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

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

4

2 回答 2

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

于 2014-07-20T18:52:38.130 回答
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)。

于 2014-07-20T19:44:43.007 回答