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。