Sitecore提供了一種轉義Sitecore查詢中包含他們不喜歡的字符的方法。這些字符包括連字符和空格。在簡化我的生活的興趣,我寫了一個簡單的輔助功能,將逃脫Sitecore的查詢的每一個部分,它一會工作得很好:轉義保留字
public static string EscapePath(string path){
return Regex.Replace(path, @"([^/]+)", "#$1#").Replace("#*#", "*");
}
(該Replace("#*#","*")
在那裏,因爲Sitecore的不喜歡它,當你在散列中包裹星號)。
正如我所說,這工作很好。今天,我碰到的情況下失敗:
EscapePath("/sitecore/content/Seattle/OR/00010046");
轉義序列看起來很無辜:
/#sitecore#/#content#/#Seattle#/#OR#/#00010046#
但查詢與消息Identifier, GUID or "*" expected at position 44
內Sitecore的失敗。我將問題縮小到查詢中的#OR#
,並突然意識到發生了什麼。顯然,即使在逃脫的情況下,Sitecore也會獨自使用單詞OR
,意味着您將兩個或多個查詢結合在一起(即保留字OR
)。顯而易見的解決方法是用*[@@name='OR']
替換#OR#
的所有實例,而且工作得很好。但是,對我而言,這看起來像一個黑客。
我知道,這將最有可能只與一個名爲OR
和AND
節點發生,但我找不到對談Sitecore的查詢中的任何保留字的SDN任何文件,而且也對如何正確逃生隻字不提一個查詢,除了在哈希中包裝查詢。
目前有一種逃避查詢的標準方式,我可以保證不會遇到這個問題嗎?或者,甚至更好,列出了Sitecore Query中所有保留字的文檔?我可以堅持使用XPath語法,只需處理(記錄的)邊緣案例並轉義這些值,但如果可能的話,我想堅持Sitecore Query。