单引号的AEM XPATH查询问题

时间:2018-08-14 09:55:43

标签: xpath full-text-search aem single-quotes

我的应用程序运行使用querybuilder API创建的查询,但最终将其转换为XPath查询并执行。一切正常,除非文本中带有引号。 我可以使用自定义谓词来搜索文本。例: predicateMap.put("0_group.2_group.title_customcase.title_fulltext", searchText);

我在http://localhost:4502/crx/explorer/ui/search.jsp的本机界面中尝试了此操作,但在该界面上也失败了。

Search for: don't
Search in: /content/geometrixx/en
XPath Query generated: /jcr:root/content/geometrixx/en//*[jcr:contains(., 'don't')] order by @jcr:score descending

异常(类似于我的服务器日志):

Error: javax.jcr.query.InvalidQueryException: java.text.ParseException:

有什么解决方法吗?我确实在SoF上找到了一些类似的问题,但没有找到确切的问题。 querydebug页面能够搜索此文本,但似乎只是用2个引号代替了它:

/jcr:root/content/geometrixx/en//*[jcr:contains(., 'don''t')]

所以我很困惑为什么将这种行为与AEM一起使用。

1 个答案:

答案 0 :(得分:0)

始终必须记住两种逃逸机制:

1)在contains语句中转义字符。例如规格说你 可以使用双引号搜索短语:“ foo bar”。这意味着如果你想 使用双引号作为文字而不是短语的定界符 逃脱它。

2)在XPath或SQL中适当地转义任何字符串文字。例如。在XPath中 字符串文字不要写成:'do n't'

用于查询,这意味着您必须编写: / jcr:root / content / geometrixx / en // * [jcr:contains(。,'don \“ t')]以@jcr:score降序排列

OR

您可以使用双引号 / jcr:root / content / geometrixx / en // * [jcr:contains(。,“ do n't”)]]按@jcr:score降序排列