2013-04-30 50 views
2

我需要使用XPath來選擇從以下字符串日期:在短語中選擇日期的正確Xpath子字符串是什麼?

44KB - 先生李四 - 13年1月1日

我不相信你可以選擇的「第三次迭代 - '爲類似

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

我該怎麼做?有沒有辦法從第一個'/'之前的空間抓取子字符串到日期結束?

在此先感謝

回答

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個字符,在這些我們刪除任何破折號或空格。

+0

這工作。我不得不弄亂字符串的長度,但它的確有竅門。就這樣我理解了這裏發生的三件事情:字符串長度給了我一個包含字符串長度的數值。子串-7給我......字符串的後半部分......字符串中的最後八個位置......?並翻譯刪除破折號或空格?感謝Dimitre的幫助! – 2013-05-01 20:20:08

+1

@rally_point,是的,基本上,你的理解是正確的:如果我們事先不知道實際的日期長度,我們採用最大可能的長度(8)並從這個子字符串中刪除任何破折號或空格。也可以從這個字符串中刪除任何非數字和非斜槓字符,但這有點複雜(「雙重翻譯」方法)。 – 2013-05-01 21:26:26

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

總是最後部分匹配。

+0

我無法使用2.0 Xpath處理器,但是您的第一個示例使我拍了額頭。只是嵌套兩個substring-after函數。我應該意識到這將起作用。當然,如果有例子,在字符串中有三個破折號,這將不會抓住他們,但我沒有遇到過任何一個。謝謝! – 2013-05-01 20:25:22

相關問題