bilobag wrote:
I see in the JCR spec 6.6.5.2 - it states that {', ", -, \} must be escaped
by a "\". However when I try to escape a single quote with a backslash, the
query throws an xpath query syntax error. Is the JCR spec correct or is
there other documentation about what characters need to be escaped? I am
already using the ISO9075 class to encode any node paths in my query. It
would be even better if there is already a method that escapes search
strings. The following is the query that fails. I am trying to pass the
string "test's" into the contains(), but when i escape the single quote with
a backslash, the query throws a sytax error.
/jcr:root/app_x0020_root//[EMAIL PROTECTED]:primaryType = 'cwe:file' and
jcr:contains(jcr:content, 'test\'s')]/(rep:excerpt()) order by @jcr:score
descending
there are alway to escape mechanisms you have to keep in mind.
1) escaping a character within the contains statement. e.g. the spec says you
can search for a phrase using double quotes: "foo bar". that means if you want
to use a double quote as literal an not a delimiter for a phrase you have to
escape it.
2) escaping any string literal appropriately in XPath or SQL. E.g. in XPath the
string literal test's must be written as: 'test''s'
for your query that means you have to write:
/jcr:root/app_x0020_root//[EMAIL PROTECTED]:primaryType = 'cwe:file' and
jcr:contains(jcr:content, 'test\''s')]/(rep:excerpt()) order by @jcr:score
descending
regards
marcel