Sitecore 提供了一种转义 Sitecore 查询中包含不喜欢字符的单词的方法。此类字符包括连字符和空格。为了简化我的生活,我编写了一个简单的辅助函数,可以转义 Sitecore 查询的每个部分,并且它运行良好一段时间:
public static string EscapePath(string path){
return Regex.Replace(path, @"([^/]+)", "#$1#").Replace("#*#", "*");
}
(the Replace("#*#","*")
在那里,因为 Sitecore 不喜欢将星号包裹在散列中)。
正如我所说,这在一段时间内效果很好。今天,我遇到了一个失败的情况:
EscapePath("/sitecore/content/Seattle/OR/00010046");
转义序列看起来很无辜:
/#sitecore#/#content#/#Seattle#/#OR#/#00010046#
但 Sitecore 内的查询失败并显示以下消息Identifier, GUID or "*" expected at position 44
。我将问题范围缩小到#OR#
在询问中,猛然意识到是怎么回事。显然 Sitecore 独领风骚OR
,即使在转义时,也意味着您将两个或多个查询连接在一起(即,作为保留字OR
)。明显的修复方法是替换所有实例#OR#
with *[@@name='OR']
,效果很好。然而,对我来说,这看起来像是一个黑客。
我知道这很可能只会发生在名为OR
and AND
,但我找不到任何有关的文档SDN http://sdn.sitecore.net/其中讨论了 Sitecore 查询中的任何保留字,除了将查询包装在哈希值中之外,没有提及如何正确转义查询。
目前是否有一种标准的方法可以保证我不会遇到这个问题?或者,更好的是,有一份概述 Sitecore 查询中所有保留字的文档?我可能会坚持使用 XPath 语法,只处理(已记录的)边缘情况并转义这些值,但如果可能的话,我想坚持使用 Sitecore 查询。