/** * Create a new <code>XPathReader</code> with a do-nothing * <code>XPathHandler</code>. */ public XPathReader() { setXPathHandler( defaultHandler ); }
private void filterExpr() throws SAXPathException getXPathHandler().startFilterExpr(); switch ( LA(1) ) Token token = match( TokenTypes.DOUBLE ); getXPathHandler().number( Double.parseDouble( token.getTokenText() ) ); break; literal(); break; match( TokenTypes.LEFT_PAREN ); expr(); match( TokenTypes.RIGHT_PAREN ); break; functionCall(); break; variableReference(); break; predicates(); getXPathHandler().endFilterExpr();
getXPathHandler().startPathExpr(); switch ( LA(1) ) filterExpr(); if ( LA(1) == TokenTypes.SLASH || LA(1) == TokenTypes.DOUBLE_SLASH ) XPathSyntaxException ex = createSyntaxException("Node-set expected"); throw ex; filterExpr(); if ( LA(1) == TokenTypes.SLASH || LA(1) == TokenTypes.DOUBLE_SLASH) locationPath( false ); if ( ( LA(2) == TokenTypes.LEFT_PAREN && ! isNodeTypeName( LT(1) ) ) || ( LA(2) == TokenTypes.COLON && LA(4) == TokenTypes.LEFT_PAREN) ) filterExpr(); if ( LA(1) == TokenTypes.SLASH || LA(1) == TokenTypes.DOUBLE_SLASH)
private void nodeTest(int axis) throws SAXPathException switch ( LA(1) ) switch ( LA(2) ) nodeTypeTest( axis ); break; nameTest( axis ); break; nameTest( axis ); break; XPathSyntaxException ex = createSyntaxException("Expected <QName> or *"); throw ex;
/** * @param args String[] * @throws SAXPathException */ public static void main(String[] args) throws SAXPathException { XPathReader reader = new XPathReader(); reader.setXPathHandler(new DebugXPathHandler()); reader .parse("/ns:one[@woof='dog']/two/./../two[functionTest(@a, @b, $woof:woof)]/three/*/four//*/five/six[@exists1 and @exists2]"); }
private void abbrStep() throws SAXPathException { switch ( LA(1) ) { case TokenTypes.DOT: { match( TokenTypes.DOT ); getXPathHandler().startAllNodeStep( Axis.SELF ); predicates(); getXPathHandler().endAllNodeStep(); break; } case TokenTypes.DOT_DOT: { match( TokenTypes.DOT_DOT ); getXPathHandler().startAllNodeStep( Axis.PARENT ); predicates(); getXPathHandler().endAllNodeStep(); break; } } }
public void parse(String xpath) throws SAXPathException { setUpParse( xpath ); getXPathHandler().startXPath(); expr(); getXPathHandler().endXPath(); if ( LA(1) != TokenTypes.EOF ) { XPathSyntaxException ex = createSyntaxException( "Unexpected '" + LT(1).getTokenText() + "'" ); throw ex; } lexer = null; tokens = null; }
private void unaryExpr() throws SAXPathException { switch ( LA(1) ) { case TokenTypes.MINUS: { getXPathHandler().startUnaryExpr(); match( TokenTypes.MINUS ); unaryExpr(); getXPathHandler().endUnaryExpr( Operator.NEGATIVE ); break; } default: { unionExpr(); break; } } }
private void relativeLocationPath() throws SAXPathException { getXPathHandler().startRelativeLocationPath(); switch ( LA(1) ) { case TokenTypes.SLASH: { match( TokenTypes.SLASH ); break; } case TokenTypes.DOUBLE_SLASH: { getXPathHandler().startAllNodeStep( Axis.DESCENDANT_OR_SELF ); getXPathHandler().endAllNodeStep(); match( TokenTypes.DOUBLE_SLASH ); break; } } steps(); getXPathHandler().endRelativeLocationPath(); }
private void orExpr() throws SAXPathException { getXPathHandler().startOrExpr(); andExpr(); boolean create = false; switch ( LA(1) ) { case TokenTypes.OR: { create = true; match( TokenTypes.OR ); orExpr(); break; } } getXPathHandler().endOrExpr( create ); }
private void andExpr() throws SAXPathException { getXPathHandler().startAndExpr(); equalityExpr(); boolean create = false; switch ( LA(1) ) { case TokenTypes.AND: { create = true; match( TokenTypes.AND ); andExpr(); break; } } getXPathHandler().endAndExpr( create ); }
private void unionExpr() throws SAXPathException { getXPathHandler().startUnionExpr(); pathExpr(); boolean create = false; switch ( LA(1) ) { case TokenTypes.PIPE: { match( TokenTypes.PIPE ); create = true; expr(); break; } } getXPathHandler().endUnionExpr( create ); }
void locationPath(boolean isAbsolute) throws SAXPathException switch ( LA(1) ) absoluteLocationPath(); relativeLocationPath(); case TokenTypes.STAR: relativeLocationPath(); break; XPathSyntaxException ex = createSyntaxException( "Unexpected '" + LT(1).getTokenText() + "'" ); throw ex;
switch ( LA(1) ) step(); break; XPathSyntaxException ex = createSyntaxException( "Expected one of '.', '..', '@', '*', <QName>" ); throw ex; if ( ( LA(1) == TokenTypes.SLASH) || ( LA(1) == TokenTypes.DOUBLE_SLASH ) ) switch ( LA(1) ) match( TokenTypes.SLASH ); break; getXPathHandler().startAllNodeStep( Axis.DESCENDANT_OR_SELF ); getXPathHandler().endAllNodeStep(); match( TokenTypes.DOUBLE_SLASH ); break; switch ( LA(1) ) step(); break; XPathSyntaxException ex = createSyntaxException( "Expected one of '.', '..', '@', '*', <QName>" );
/** * Validation Xpath query * * @param query xpath query * @return true if xpath query valid */ public boolean isValidXpathQuery(String query) { try { XPathReader reader = new XPathReader(); reader.parse(query); } catch (Exception e) { return false; } return true; }
switch ( LA(1) ) abbrStep(); return; axis = axisSpecifier(); break; if ( LA(2) == TokenTypes.DOUBLE_COLON ) axis = axisSpecifier(); nodeTest( axis );
private void functionCall() throws SAXPathException { String prefix = null; String functionName = null; if ( LA(2) == TokenTypes.COLON ) { prefix = match( TokenTypes.IDENTIFIER ).getTokenText(); match( TokenTypes.COLON ); } else { prefix = ""; } functionName = match( TokenTypes.IDENTIFIER ).getTokenText(); getXPathHandler().startFunction( prefix, functionName ); match ( TokenTypes.LEFT_PAREN ); arguments(); match ( TokenTypes.RIGHT_PAREN ); getXPathHandler().endFunction(); }
private void additiveExpr() throws SAXPathException { multiplicativeExpr(); int la = LA(1); while (la == TokenTypes.PLUS || la == TokenTypes.MINUS) { switch ( la ) { case TokenTypes.PLUS: { match( TokenTypes.PLUS ); getXPathHandler().startAdditiveExpr(); multiplicativeExpr(); getXPathHandler().endAdditiveExpr( Operator.ADD ); break; } case TokenTypes.MINUS: { match( TokenTypes.MINUS ); getXPathHandler().startAdditiveExpr(); multiplicativeExpr(); getXPathHandler().endAdditiveExpr( Operator.SUBTRACT ); break; } } la = LA(1); } }