gpt4 book ai didi

转义保留字

转载 作者:行者123 更新时间:2023-12-03 06:40:40 26 4
gpt4 key购买 nike

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#

但 Sitecore 内的查询失败,并显示消息位置 44 处应有标识符、GUID 或“*”。我将问题范围缩小到查询中的#OR#,然后突然意识到发生了什么事。显然,Sitecore 采用单独的单词 OR,即使在转义时也是如此,这意味着您将两个或多个查询连接在一起(即,作为保留字 OR) 。明显的解决方法是将所有 #OR# 实例替换为 *[@@name='OR'],这样效果就很好。然而,对我来说,这看起来像是一种黑客攻击。

我知道这种情况很可能只发生在名为 ORAND 的节点上,但我在 SDN 上找不到任何文档。其中讨论了 Sitecore 查询中的任何保留字,除了将查询包装在哈希值中之外,没有提及如何正确转义查询。

目前是否有一种标准方法可以保证我不会遇到此问题?或者,更好的是,有一份概述 Sitecore 查询中所有保留字的文档?我可能会坚持使用 XPath 语法,只处理(已记录的)边缘情况并转义这些值,但如果可能的话,我想坚持使用 Sitecore 查询。

最佳答案

您可以看到将在以下方法中引发此异常的“保留”词列表

Sitecore.Data.Query.QueryTokenBuilder.Identifier(string)

基本上列表是:

  • 祖先
  • child
  • 后代
  • div
  • 以下
  • 模组
  • 家长
  • 前面
  • 自己
  • 真实
  • 异或

在我有限的研究中,我没有找到转义这些关键字的方法,因此您可能需要围绕此列表进行硬编码。

关于转义保留字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com