2011-02-09 59 views
5

有沒有什麼辦法像使用SQL一樣用XQuery執行LIKE操作?xQuery LIKE-operator?

我不想構建一些「startswith」,「endswith」和「contains」表達式。

什麼,我想實現舉例:

for $x in /user where $x/firstname LIKE '%xxx' return $x 
for $x in /user where $x/middlename LIKE 'xxx%' return $x 
for $x in /user where $x/lastname LIKE '%xxx%' return $x 

有沒有辦法在XQuery來實現這一目標?

編輯:

得到了上述問題的答案。新問題:

會有什麼辦法可以以相反的方式做到這一點嗎?我想用sql等價的NOT LIKE運算符運行這些查詢。這可能嗎?它必須是在FLWOR表達式

EDIT2:

問題解決了。你可以運行fn:not(starts-with('123','1')),它返回false。

+0

我很困惑的約束「它必須在FLWOR表達式」。簡單公式`/ user [matches(firstname,'。* xxx')]`有什麼問題?簡單路徑表達式通常比FLWOR表達式更簡潔。 – 2016-01-26 08:10:45

+0

這是一個有用的問題,你似乎已經自己回答了,但沒有提供輸出。你能在這裏發表你的答案嗎? 您能夠使用LIKE比較器字符串的語法,還是必須將其轉換爲xQuery特定的比較字符串? – Ben 2016-05-18 17:09:18

回答

13

的XPath 2.0和XQuery 1.0(如標準化由W3C)具有與matches功能http://www.w3.org/TR/xpath-functions/#func-matches正則表達式支持:

/user[matches(firstname, 'xxx$')] 

當然還有像starts-withcontains(均在XPath中1.0/2.0功能)和ends-with(僅在XPath 2.0中)可能就足夠了。