用于在短语中选择日期的正确Xpath子字符串是什么?

时间:2013-04-30 19:05:26

标签: xpath substring

我需要使用Xpath从以下字符串中选择日期:

44kb - John Doe先生 - 2013年1月1日

我不相信你可以为

之类的东西选择' - '的第三次迭代
substring-after($string, '-'[3])

我该怎么做?有没有办法在第一个'/'到日期结束之前从空格中获取子串?

提前致谢

2 个答案:

答案 0 :(得分:2)

fn:substring-after(...)只会拆分一次,因此您必须将其应用两次。

substring-after(substring-after('44kb - Mr John Doe - 1/1/13', ' - '), ' - ')

如果您的XPath处理器支持它(至少XPath 2.0),您还可以使用fn:tokenize(...)拆分为所有部分,然后使用位置谓词来获取第三个部分。

tokenize("44kb - Mr John Doe - 1/1/13", ' - ')[3]

如果部件数量可能不同,但日期始终是最后一个,您也可以使用

tokenize("44kb - Mr John Doe - 1/1/13", ' - ')[last()]

总是匹配最后一部分。

答案 1 :(得分:1)

如果只有两个短划线,如在提供的示例中,可以使用此XPath 1.0表达式

substring-after(substring-after('44kb - Mr John Doe - 1/1/13', '- '), '- ')

如果知道日期是字符串结束的日期,并且日期的长度是6,那么可以使用

substring('44kb - Mr John Doe - 1/1/13', string-length('44kb - Mr John Doe - 1/1/13') -5)

<强>替代地

translate(substring('44kb - Mr John Doe - 1/1/13', 
                    string-length('44kb - Mr John Doe - 1/1/13') -7),
         '- ', '')

这里我们事先不知道日期的长度,所以我们取最后8个字符,在这些字符中我们删除任何破折号或空格。