⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpath.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        //        // Data        //        /** Symbol table. */        private SymbolTable fSymbolTable;        // symbols        private static final String fAndSymbol = "and".intern();        private static final String fOrSymbol = "or".intern();        private static final String fModSymbol = "mod".intern();        private static final String fDivSymbol = "div".intern();        private static final String fCommentSymbol = "comment".intern();        private static final String fTextSymbol = "text".intern();        private static final String fPISymbol = "processing-instruction".intern();        private static final String fNodeSymbol = "node".intern();        private static final String fAncestorSymbol = "ancestor".intern();        private static final String fAncestorOrSelfSymbol = "ancestor-or-self".intern();        private static final String fAttributeSymbol = "attribute".intern();        private static final String fChildSymbol = "child".intern();        private static final String fDescendantSymbol = "descendant".intern();        private static final String fDescendantOrSelfSymbol = "descendant-or-self".intern();        private static final String fFollowingSymbol = "following".intern();        private static final String fFollowingSiblingSymbol = "following-sibling".intern();        private static final String fNamespaceSymbol = "namespace".intern();        private static final String fParentSymbol = "parent".intern();        private static final String fPrecedingSymbol = "preceding".intern();        private static final String fPrecedingSiblingSymbol = "preceding-sibling".intern();        private static final String fSelfSymbol = "self".intern();        //        // Constructors        //        /** Constructs an XPath expression scanner. */        public Scanner(SymbolTable symbolTable) {            // save pool and tokens            fSymbolTable = symbolTable;        } // <init>(SymbolTable)        /**         *         */        public boolean scanExpr(SymbolTable symbolTable,                                XPath.Tokens tokens, String data,                                int currentOffset, int endOffset)            throws XPathException {            int nameOffset;            String nameHandle, prefixHandle;            boolean starIsMultiplyOperator = false;            int ch;            while (true) {                if (currentOffset == endOffset) {                    break;                }                ch = data.charAt(currentOffset);                //                // [39] ExprWhitespace ::= S                //                while (ch == ' ' || ch == 0x0A || ch == 0x09 || ch == 0x0D) {                    if (++currentOffset == endOffset) {                        break;                    }                    ch = data.charAt(currentOffset);                }                if (currentOffset == endOffset) {                    break;                }                //                // [28] ExprToken ::= '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::'                //                  | NameTest | NodeType | Operator | FunctionName                //                  | AxisName | Literal | Number | VariableReference                //                byte chartype = (ch >= 0x80) ? CHARTYPE_NONASCII : fASCIICharMap[ch];                switch (chartype) {                case CHARTYPE_OPEN_PAREN:       // '('                    addToken(tokens, XPath.Tokens.EXPRTOKEN_OPEN_PAREN);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_CLOSE_PAREN:      // ')'                    addToken(tokens, XPath.Tokens.EXPRTOKEN_CLOSE_PAREN);                    starIsMultiplyOperator = true;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_OPEN_BRACKET:     // '['                    addToken(tokens, XPath.Tokens.EXPRTOKEN_OPEN_BRACKET);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_CLOSE_BRACKET:    // ']'                    addToken(tokens, XPath.Tokens.EXPRTOKEN_CLOSE_BRACKET);                    starIsMultiplyOperator = true;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                //                // [30] Number ::= Digits ('.' Digits?)? | '.' Digits                //                                         ^^^^^^^^^^                //                case CHARTYPE_PERIOD:           // '.', '..' or '.' Digits                    if (currentOffset + 1 == endOffset) {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_PERIOD);                        starIsMultiplyOperator = true;                        currentOffset++;                        break;                    }                    ch = data.charAt(currentOffset + 1);                    if (ch == '.') {            // '..'                        addToken(tokens, XPath.Tokens.EXPRTOKEN_DOUBLE_PERIOD);                        starIsMultiplyOperator = true;                        currentOffset += 2;                    } else if (ch >= '0' && ch <= '9') {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_NUMBER);                        starIsMultiplyOperator = true;                        currentOffset = scanNumber(tokens, data, endOffset, currentOffset/*, encoding*/);                    } else if (ch == '/') {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_PERIOD);                        starIsMultiplyOperator = true;                        currentOffset++;                    } else if (ch == '|') {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_PERIOD);                        starIsMultiplyOperator = true;                        currentOffset++;                        break;                    } else if (ch == ' ' || ch == 0x0A || ch == 0x09 || ch == 0x0D) {                        // this is legal if the next token is non-existent or |                        do {                            if (++currentOffset == endOffset) {                                break;                            }                            ch = data.charAt(currentOffset);                        } while (ch == ' ' || ch == 0x0A || ch == 0x09 || ch == 0x0D);                         if (currentOffset == endOffset || ch == '|') {                            addToken(tokens, XPath.Tokens.EXPRTOKEN_PERIOD);                            starIsMultiplyOperator = true;                            break;                        }                        throw new XPathException ("c-general-xpath");                    } else {                    // '.'                        throw new XPathException ("c-general-xpath");                    }                    if (currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_ATSIGN:           // '@'                    addToken(tokens, XPath.Tokens.EXPRTOKEN_ATSIGN);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_COMMA:            // ','                    addToken(tokens, XPath.Tokens.EXPRTOKEN_COMMA);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_COLON:            // '::'                    if (++currentOffset == endOffset) {                // System.out.println("abort 1a");                        return false; // REVISIT                    }                    ch = data.charAt(currentOffset);                    if (ch != ':') {                // System.out.println("abort 1b");                        return false; // REVISIT                    }                    addToken(tokens, XPath.Tokens.EXPRTOKEN_DOUBLE_COLON);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_SLASH:            // '/' and '//'                    if (++currentOffset == endOffset) {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_SLASH);                        starIsMultiplyOperator = false;                        break;                    }                    ch = data.charAt(currentOffset);                    if (ch == '/') { // '//'                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_DOUBLE_SLASH);                        starIsMultiplyOperator = false;                        if (++currentOffset == endOffset) {                            break;                        }                    } else {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_SLASH);                        starIsMultiplyOperator = false;                    }                    break;                case CHARTYPE_UNION:            // '|'                    addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_UNION);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_PLUS:             // '+'                    addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_PLUS);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_MINUS:            // '-'                    addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_MINUS);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_EQUAL:            // '='                    addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_EQUAL);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_EXCLAMATION:      // '!='                    if (++currentOffset == endOffset) {                // System.out.println("abort 2a");                        return false; // REVISIT                    }                    ch = data.charAt(currentOffset);                    if (ch != '=') {                // System.out.println("abort 2b");                        return false; // REVISIT                    }                    addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_NOT_EQUAL);                    starIsMultiplyOperator = false;                    if (++currentOffset == endOffset) {                        break;                    }                    break;                case CHARTYPE_LESS: // '<' and '<='                    if (++currentOffset == endOffset) {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_LESS);                        starIsMultiplyOperator = false;                        break;                    }                    ch = data.charAt(currentOffset);                    if (ch == '=') { // '<='                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_LESS_EQUAL);                        starIsMultiplyOperator = false;                        if (++currentOffset == endOffset) {                            break;                        }                    } else {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_LESS);                        starIsMultiplyOperator = false;                    }                    break;                case CHARTYPE_GREATER: // '>' and '>='                    if (++currentOffset == endOffset) {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_GREATER);                        starIsMultiplyOperator = false;                        break;                    }                    ch = data.charAt(currentOffset);                    if (ch == '=') { // '>='                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_GREATER_EQUAL);                        starIsMultiplyOperator = false;                        if (++currentOffset == endOffset) {                            break;                        }                    } else {                        addToken(tokens, XPath.Tokens.EXPRTOKEN_OPERATOR_GREATER);                        starIsMultiplyOperator = false;                    }                    break;                //                // [29] Literal ::= '"' [^"]* '"' | "'" [^']* "'"                //                case CHARTYPE_QUOTE:            // '\"' or '\''                    int qchar = ch;                    if (++currentOffset == endOffset) {                // System.out.println("abort 2c");                        return false; // REVISIT                    }                    ch = data.charAt(currentOffset);                    int litOffset = currentOffset;                    while (ch != qchar) {                        if (++currentOffset == endOffset) {                // System.out.println("abort 2d");                            return false; // REVISIT                        }                        ch = data.charAt(currentOffset);                    }                    int litLength = currentOffset - litOffset;                    addToken(tokens, XPath.Tokens.EXPRTOKEN_LITERAL);                    starIsMultiplyOperator = true;                    tokens.addToken(symbolTable.addSymbol(data.substring(litOffset, litOffset + litLength)));                    if (++currentOffset == endOffset) {                        break;                    }                    break;                //                // [30] Number ::= Digits ('.' Digits?)? | '.' Digits                // [31] Digits ::= [0-9]+ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -