You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@sling.apache.org by Julian Sedding <js...@gmail.com> on 2019/09/05 08:33:33 UTC

Re: Executing xpath query with number in path

Hi Roy

Like others said before, ISO9075 is what you need. You only need to
encode the first digit. The encoding is simple enough to remember (if
used regularly ;) ):

0: _x0030_
1: _x0031_
2: _x0032_
...

Your query would thus become:
/jcr:root/content/launches/_x0032_019/_x0030_8/_x0032_9/my-launch/content/site-name//*[@sling:resourceType='some/components/path']

As a shortcut in situations where the depth is known I sometimes use:
/jcr:root/content/launches/*/*/*/my-launch/content/site-name//*[@sling:resourceType='some/components/path']

Another alternative would be:
/jcr:root/content/launches/*[fn:name() = '2019']/*[fn:name() =
'08']/*[fn:name() =
'29']/my-launch/content/site-name//*[@sling:resourceType='some/components/path']

I believe that the ISO9075 encoded version performs best, but I didn't
verify that claim. Most likely performance is not your main concern in
any case, as all of the above should be reasonable fast  ;)

Regards
Julian

On Thu, Aug 29, 2019 at 6:52 PM Eric Norman <er...@gmail.com> wrote:
>
> If I recall correctly, if you want to use paths in XPath queries then you
> need to escape the path segments according to ISO9075 rules.   For your
> referenced, there is a brief section about that on the wiki at [1].
>
> Also, there is a utility class in jackrabbit that can do the ISO9075 path
> encoding for you at [2] that you may utilize.
>
> 1.
> http://jackrabbit.apache.org/archive/wiki/JCR/EncodingAndEscaping_115513396.html
> 2.
> http://jackrabbit.apache.org/api/trunk/org/apache/jackrabbit/util/ISO9075.html
>
> I hope that helps.
>
> On Thu, Aug 29, 2019 at 8:54 AM Roy Teeuwen <ro...@teeuwen.be> wrote:
>
> > Hey all,
> >
> > In the framework that we use (AEM) there is a folder structure as
> > following:
> >
> > /content/launches/2019/08/29/my-launch/content/site-name
> >
> > I would like to do a query to search for subresources in this site, but it
> > seems that this gives issues because an xpath query cannot take numbers as
> > path names:
> >
> > /jcr:root/content/launches/2019(*)/08/29/my-launch/content/site-name//*[@sling:resourceType='some/components/path'];
> > expected: jcr:root, /, *, @, (, .
> >
> > Is there any way around this to still make it work with xpath queries? Can
> > I escape it in any way? Or can I say "start the query below
> > /content/launches/2019/08/29/my-launch/content/site-name so that it doesnt
> > see the numbers in the query
> >
> > Thanks!
> > Roy
> >
> >