我需要使用XPath来选择从以下字符串日期:在短语中选择日期的正确Xpath子字符串是什么?
44KB - 先生李四 - 13年1月1日
我不相信你可以选择的“第三次迭代 - '为类似
substring-after($string, '-'[3])
我该怎么做?有没有办法从第一个'/'之前的空间抓取子字符串到日期结束?
在此先感谢
我需要使用XPath来选择从以下字符串日期:在短语中选择日期的正确Xpath子字符串是什么?
44KB - 先生李四 - 13年1月1日
我不相信你可以选择的“第三次迭代 - '为类似
substring-after($string, '-'[3])
我该怎么做?有没有办法从第一个'/'之前的空间抓取子字符串到日期结束?
在此先感谢
如果只有两个短划线,在所提供的例子中,一个可以简单地使用这个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个字符,在这些我们删除任何破折号或空格。
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()]
总是最后部分匹配。
我无法使用2.0 Xpath处理器,但是您的第一个示例使我拍了额头。只是嵌套两个substring-after函数。我应该意识到这将起作用。当然,如果有例子,在字符串中有三个破折号,这将不会抓住他们,但我没有遇到过任何一个。谢谢! – 2013-05-01 20:25:22
这工作。我不得不弄乱字符串的长度,但它的确有窍门。就这样我理解了这里发生的三件事情:字符串长度给了我一个包含字符串长度的数值。子串-7给我......字符串的后半部分......字符串中的最后八个位置......?并翻译删除破折号或空格?感谢Dimitre的帮助! – 2013-05-01 20:20:08
@rally_point,是的,基本上,你的理解是正确的:如果我们事先不知道实际的日期长度,我们采用最大可能的长度(8)并从这个子字符串中删除任何破折号或空格。也可以从这个字符串中删除任何非数字和非斜杠字符,但这有点复杂(“双重翻译”方法)。 – 2013-05-01 21:26:26