Search code examples
javaarraysjsonxpathjxpath

JXPath expression with escape character '#' giving issues


Input JSON :

[
    {"Activity":"yes","SBNumber":"123"},
    {"Activity":"yes","SB#":"123"}
]

JXPath Expressions:

//works : returns "123"
JXPathContext.newContext(input).getValue("//*/SBNumber")

//fails: throwing JXPathInvalidSyntaxException
JXPathContext.newContext(input).getValue("//*/SB#")

How do i escape # to retrieve value from SB# ?

Failed attempts include

JXPathContext.newContext(input).getValue("//*/SB\\#")  
JXPathContext.newContext(input).getValue("//*/SB[#]")
JXPathContext.newContext(input).getValue("//*/SB*")    

etc..

However, I am able to retrieve node from below

JXPathContext.newContext(input).getValue("//*/*[contains(.,'SB#')]")

But then it is reference to the parent node only :-(

Any possible solution / alternative will be helpful.. tx


Solution

  • Adding a context variable can help escaping like mentioned below-

    JXPathContext context = JXPathContext.newContext(input);
    context.getVariables().declareVariable("blabla", "SB#");
    context.getValue("//*/$blabla");