2

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

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

我不相信您可以选择“-”的第三次迭代,例如

substring-after($string, '-'[3])

我该怎么做?有没有办法从第一个'/'之前的空间中获取子字符串到日期的结尾?

提前致谢

4

2 回答 2

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()]

总是匹配最后一部分。

于 2013-04-30T21:08:39.220 回答
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 个字符,并在其中删除任何破折号或空格。

于 2013-05-01T03:47:24.517 回答