我需要使用Xpath从以下字符串中选择日期:
44kb - John Doe先生 - 2013年1月1日我不相信你可以为
之类的东西选择' - '的第三次迭代substring-after($string, '-'[3])
我该怎么做?有没有办法在第一个'/'到日期结束之前从空格中获取子串?
提前致谢
答案 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个字符,在这些字符中我们删除任何破折号或空格。