Class XPathParser
java.lang.Object
org.loboevolution.apache.xpath.compiler.XPathParser
Tokenizes and parses XPath expressions. This should really be named XPathParserImpl, and may be
renamed in the future.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
protected static final int
Results from checking FilterExpr syntaxprotected static final int
protected static final int
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
AbbreviatedNodeTestStep
(boolean isLeadingSlashPermitted) AbbreviatedNodeTestStep ::= '@'?protected int
AdditiveExpr
(int addPos) This has to handle construction of the operations so that they are evaluated in pre-fix order.protected void
AndExpr()
AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExprprotected void
Argument()
Argument ::= Exprprotected int
AxisName()
Basis ::= AxisName '::' NodeTest | AbbreviatedBasisprotected void
Basis()
Basis ::= AxisName '::' NodeTest | AbbreviatedBasisprotected void
StringExpr ::= Exprprotected String
Dump the remaining token queue.protected int
EqualityExpr
(int addPos) EqualityExpr ::= RelationalExpr | EqualityExpr '=' RelationalExprprotected void
Expr()
Expr ::= OrExprprotected int
FilterExpr ::= PrimaryExpr | FilterExpr Predicateprotected boolean
FunctionCall ::= FunctionName '(' ( Argument ( ',' Argument)*)?Return the current error listener.protected void
IdKeyPattern ::= 'id' '(' Literal ')' | 'key' '(' Literal ',' Literal ')' (Also handle doc())void
initMatchPattern
(Compiler compiler, String expression, PrefixResolver namespaceContext) Given an string, init an XPath object for pattern matches, in order that a parse doesn't have to be done each time the expression is evaluated.void
initXPath
(Compiler compiler, String expression, PrefixResolver namespaceContext) Given an string, init an XPath object for selections, in order that a parse doesn't have to be done each time the expression is evaluated.protected void
Literal()
The value of the Literal is the sequence of characters inside the " or ' characters.protected void
LocationPath ::= RelativeLocationPath | AbsoluteLocationPathprotected void
LocationPathPattern ::= '/' RelativePathPattern?protected int
MultiplicativeExpr
(int addPos) This has to handle construction of the operations so that they are evaluated in pre-fix order.protected void
NCName()
NCName ::= (Letter | '_') (NCNameChar) NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extenderprotected void
NodeTest
(int axesType) NodeTest ::= WildcardName | NodeType '(' ')' | 'processing-instruction' '(' Literal ')'protected void
Number()
Number ::= [0-9]+('protected void
NumberExpr ::= Exprprotected void
OrExpr()
OrExpr ::= AndExpr | OrExpr 'or' AndExprprotected void
PathExpr()
PathExpr ::= LocationPath | FilterExpr | FilterExpr '/' RelativeLocationPath | FilterExpr '//' RelativeLocationPathprotected void
Pattern()
Pattern ::= LocationPathPattern | Pattern '|' LocationPathPatternprotected void
Predicate ::= '[' PredicateExpr ']'protected void
PredicateExpr ::= Exprprotected boolean
PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCallprotected void
QName()
QName ::= (Prefix ':')?protected int
RelationalExpr
(int addPos) RelationalExpr ::= AdditiveExpr | RelationalExpr '<' AdditiveExpr | RelationalExpr '>' AdditiveExpr | RelationalExpr '<=' AdditiveExpr | RelationalExpr '<=' AdditiveExprprotected boolean
RelativeLocationPath ::= Step | RelativeLocationPath '/' Step | AbbreviatedRelativeLocationPathprotected void
RelativePathPattern ::= StepPattern | RelativePathPattern '/' StepPattern | RelativePathPattern '//' StepPatternvoid
setErrorHandler
(ErrorListener handler) Allow an application to register an error event handler, where syntax errors will be sent.protected boolean
Step()
Step ::= Basis Predicate | AbbreviatedStepprotected boolean
StepPattern
(boolean isLeadingSlashPermitted) StepPattern ::= AbbreviatedNodeTestStepprotected void
StringExpr ::= Exprprotected void
UnaryExpr ::= UnionExpr | '-' UnaryExprprotected void
The context of the right hand side expressions is the context of the left hand side expression.
-
Field Details
-
CONTINUE_AFTER_FATAL_ERROR
- See Also:
-
FILTER_MATCH_FAILED
protected static final int FILTER_MATCH_FAILEDResults from checking FilterExpr syntax- See Also:
-
FILTER_MATCH_PRIMARY
protected static final int FILTER_MATCH_PRIMARY- See Also:
-
FILTER_MATCH_PREDICATES
protected static final int FILTER_MATCH_PREDICATES- See Also:
-
-
Constructor Details
-
XPathParser
The parser constructor.
-
-
Method Details
-
initXPath
public void initXPath(Compiler compiler, String expression, PrefixResolver namespaceContext) throws TransformerException Given an string, init an XPath object for selections, in order that a parse doesn't have to be done each time the expression is evaluated.- Parameters:
compiler
- The compiler object.expression
- A string conforming to the XPath grammar.namespaceContext
- An object that is able to resolve prefixes in the XPath to namespaces.- Throws:
TransformerException
- in case of error
-
initMatchPattern
public void initMatchPattern(Compiler compiler, String expression, PrefixResolver namespaceContext) throws TransformerException Given an string, init an XPath object for pattern matches, in order that a parse doesn't have to be done each time the expression is evaluated.- Parameters:
compiler
- The XPath object to be initialized.expression
- A String representing the XPath.namespaceContext
- An object that is able to resolve prefixes in the XPath to namespaces.- Throws:
TransformerException
- in case of error
-
setErrorHandler
Allow an application to register an error event handler, where syntax errors will be sent. If the error listener is not set, syntax errors will be sent to System.err.- Parameters:
handler
- Reference to error listener where syntax errors will be sent.
-
getErrorListener
Return the current error listener.- Returns:
- The error listener, which should not normally be null, but may be.
-
dumpRemainingTokenQueue
Dump the remaining token queue. Thanks to Craig for this.- Returns:
- A dump of the remaining token queue, which may be appended to an error message.
-
Expr
Expr ::= OrExpr- Throws:
TransformerException
- in case of error
-
OrExpr
OrExpr ::= AndExpr | OrExpr 'or' AndExpr- Throws:
TransformerException
- in case of error
-
AndExpr
AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr- Throws:
TransformerException
- in case of error
-
EqualityExpr
EqualityExpr ::= RelationalExpr | EqualityExpr '=' RelationalExpr- Parameters:
addPos
- Position where expression is to be added, or -1 for append.- Returns:
- the position at the end of the equality expression.
- Throws:
TransformerException
- in case of error
-
RelationalExpr
RelationalExpr ::= AdditiveExpr | RelationalExpr '<' AdditiveExpr | RelationalExpr '>' AdditiveExpr | RelationalExpr '<=' AdditiveExpr | RelationalExpr '<=' AdditiveExpr- Parameters:
addPos
- Position where expression is to be added, or -1 for append.- Returns:
- the position at the end of the relational expression.
- Throws:
TransformerException
- in case of error
-
AdditiveExpr
This has to handle construction of the operations so that they are evaluated in pre-fix order. So, for 9+7-6, instead of |+|9|-|7|6|, this needs to be evaluated as |-|+|9|7|6|.AdditiveExpr ::= MultiplicativeExpr | AdditiveExpr '+' MultiplicativeExpr | AdditiveExpr '-' MultiplicativeExpr
- Parameters:
addPos
- Position where expression is to be added, or -1 for append.- Returns:
- the position at the end of the equality expression.
- Throws:
TransformerException
- in case of error
-
MultiplicativeExpr
This has to handle construction of the operations so that they are evaluated in pre-fix order. So, for 9+7-6, instead of |+|9|-|7|6|, this needs to be evaluated as |-|+|9|7|6|.MultiplicativeExpr ::= UnaryExpr | MultiplicativeExpr MultiplyOperator UnaryExpr | MultiplicativeExpr 'div' UnaryExpr | MultiplicativeExpr 'mod' UnaryExpr | MultiplicativeExpr 'quo' UnaryExpr
- Parameters:
addPos
- Position where expression is to be added, or -1 for append.- Returns:
- the position at the end of the equality expression.
- Throws:
TransformerException
- in case of error
-
UnaryExpr
UnaryExpr ::= UnionExpr | '-' UnaryExpr- Throws:
TransformerException
- in case of error
-
StringExpr
StringExpr ::= Expr- Throws:
TransformerException
- in case of error
-
BooleanExpr
StringExpr ::= Expr- Throws:
TransformerException
- in case of error
-
NumberExpr
NumberExpr ::= Expr- Throws:
TransformerException
- in case of error
-
UnionExpr
The context of the right hand side expressions is the context of the left hand side expression. The results of the right hand side expressions are node sets. The result of the left hand side UnionExpr is the union of the results of the right hand side expressions.UnionExpr ::= PathExpr | UnionExpr '|' PathExpr
- Throws:
TransformerException
- in case of error
-
PathExpr
PathExpr ::= LocationPath | FilterExpr | FilterExpr '/' RelativeLocationPath | FilterExpr '//' RelativeLocationPath- Throws:
TransformerException
- in case of error
-
FilterExpr
FilterExpr ::= PrimaryExpr | FilterExpr Predicate- Returns:
- FILTER_MATCH_PREDICATES, if this method successfully matched a FilterExpr with one or more Predicates; FILTER_MATCH_PRIMARY, if this method successfully matched a FilterExpr that was just a PrimaryExpr; or FILTER_MATCH_FAILED, if this method did not match a FilterExpr
- Throws:
TransformerException
- in case of error
-
PrimaryExpr
PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall- Returns:
- true if this method successfully matched a PrimaryExpr
- Throws:
TransformerException
- in case of error
-
Argument
Argument ::= Expr- Throws:
TransformerException
- in case of error
-
FunctionCall
FunctionCall ::= FunctionName '(' ( Argument ( ',' Argument)*)? ')'- Returns:
- true if, and only if, a FunctionCall was matched
- Throws:
TransformerException
- in case of error
-
LocationPath
LocationPath ::= RelativeLocationPath | AbsoluteLocationPath- Throws:
TransformerException
- in case of error
-
RelativeLocationPath
RelativeLocationPath ::= Step | RelativeLocationPath '/' Step | AbbreviatedRelativeLocationPath- Returns:
- true if, and only if, a RelativeLocationPath was matched
- Throws:
TransformerException
- in case of error
-
Step
Step ::= Basis Predicate | AbbreviatedStep- Returns:
- false if step was empty (or only a '/'); true, otherwise
- Throws:
TransformerException
- in case of error
-
Basis
Basis ::= AxisName '::' NodeTest | AbbreviatedBasis- Throws:
TransformerException
- in case of error
-
AxisName
Basis ::= AxisName '::' NodeTest | AbbreviatedBasis- Returns:
- FROM_XXX axes type, found in
Keywords
. - Throws:
TransformerException
- in case of error
-
NodeTest
NodeTest ::= WildcardName | NodeType '(' ')' | 'processing-instruction' '(' Literal ')'- Parameters:
axesType
- FROM_XXX axes type, found inKeywords
.- Throws:
TransformerException
- in case of error
-
Predicate
Predicate ::= '[' PredicateExpr ']'- Throws:
TransformerException
- in case of error
-
PredicateExpr
PredicateExpr ::= Expr- Throws:
TransformerException
- in case of error
-
QName
QName ::= (Prefix ':')? LocalPart Prefix ::= NCName LocalPart ::= NCName- Throws:
TransformerException
- in case of error
-
NCName
protected void NCName()NCName ::= (Letter | '_') (NCNameChar) NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender -
Literal
The value of the Literal is the sequence of characters inside the " or ' characters.Literal ::= '"' [^"]* '"' | "'" [^']* "'"
- Throws:
TransformerException
- in case of error
-
Number
Number ::= [0-9]+('.'[0-9]+)? | '.'[0-9]+- Throws:
TransformerException
- in case of error
-
Pattern
Pattern ::= LocationPathPattern | Pattern '|' LocationPathPattern- Throws:
TransformerException
- in case of error
-
LocationPathPattern
LocationPathPattern ::= '/' RelativePathPattern? | IdKeyPattern (('/' | '//') RelativePathPattern)? | '//'? RelativePathPattern- Throws:
TransformerException
- in case of error
-
IdKeyPattern
IdKeyPattern ::= 'id' '(' Literal ')' | 'key' '(' Literal ',' Literal ')' (Also handle doc())- Throws:
TransformerException
- in case of error
-
RelativePathPattern
RelativePathPattern ::= StepPattern | RelativePathPattern '/' StepPattern | RelativePathPattern '//' StepPattern- Throws:
TransformerException
- in case of error
-
StepPattern
StepPattern ::= AbbreviatedNodeTestStep- Parameters:
isLeadingSlashPermitted
- a boolean indicating whether a slash can appear at the start of this step- Returns:
- boolean indicating whether a slash following the step was consumed
- Throws:
TransformerException
- in case of error
-
AbbreviatedNodeTestStep
protected boolean AbbreviatedNodeTestStep(boolean isLeadingSlashPermitted) throws TransformerException AbbreviatedNodeTestStep ::= '@'? NodeTest Predicate- Parameters:
isLeadingSlashPermitted
- a boolean indicating whether a slash can appear at the start of this step- Returns:
- boolean indicating whether a slash following the step was consumed
- Throws:
TransformerException
- in case of error
-