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

📄 xpathimpl.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        }        try {             XObject resultObject = eval( expression, item );            return getResultAsType( resultObject, returnType );        } catch ( java.lang.NullPointerException npe ) {            // If VariableResolver returns null Or if we get             // NullPointerException at this stage for some other reason            // then we have to reurn XPathException             throw new XPathExpressionException ( npe );        } catch ( javax.xml.transform.TransformerException te ) {            Throwable nestedException = te.getException();            if ( nestedException instanceof javax.xml.xpath.XPathFunctionException ) {                throw (javax.xml.xpath.XPathFunctionException)nestedException;            } else {                // For any other exceptions we need to throw                 // XPathExpressionException ( as per spec )                throw new XPathExpressionException ( te );            }        }             }    private boolean isSupported( QName returnType ) {        if ( ( returnType.equals( XPathConstants.STRING ) ) ||             ( returnType.equals( XPathConstants.NUMBER ) ) ||             ( returnType.equals( XPathConstants.BOOLEAN ) ) ||             ( returnType.equals( XPathConstants.NODE ) ) ||             ( returnType.equals( XPathConstants.NODESET ) )  ) {              return true;        }        return false;     }    private Object getResultAsType( XObject resultObject, QName returnType )        throws javax.xml.transform.TransformerException {        // XPathConstants.STRING        if ( returnType.equals( XPathConstants.STRING ) ) {             return resultObject.str();        }        // XPathConstants.NUMBER        if ( returnType.equals( XPathConstants.NUMBER ) ) {             return new Double ( resultObject.num());        }        // XPathConstants.BOOLEAN        if ( returnType.equals( XPathConstants.BOOLEAN ) ) {             return new Boolean( resultObject.bool());        }        // XPathConstants.NODESET ---ORdered, UNOrdered???        if ( returnType.equals( XPathConstants.NODESET ) ) {             return resultObject.nodelist();        }        // XPathConstants.NODE        if ( returnType.equals( XPathConstants.NODE ) ) {             NodeIterator ni = resultObject.nodeset();             //Return the first node, or null            return ni.nextNode();        }        String fmsg = XSLMessages.createXPATHMessage(                XPATHErrorResources.ER_UNSUPPORTED_RETURN_TYPE,                new Object[] { returnType.toString()});        throw new IllegalArgumentException( fmsg );    }                                 /**     * <p>Evaluate an XPath expression in the specified context and return the result as a <code>String</code>.</p>     *     * <p>This method calls {@link #evaluate(String expression, Object item, QName returnType)} with a <code>returnType</code> of     * {@link XPathConstants#STRING}.</p>     *     * <p>See "Evaluation of XPath Expressions" of JAXP 1.3 spec      * for context item evaluation,     * variable, function and QName resolution and return type conversion.</p>     *     * <p>If a <code>null</code> value is provided for     * <code>item</code>, an empty document will be used for the     * context.     * If <code>expression</code> is <code>null</code>, then a <code>NullPointerException</code> is thrown.</p>     *     * @param expression The XPath expression.     * @param item The starting context (node or node list, for example).     *     * @return The <code>String</code> that is the result of evaluating the expression and     *   converting the result to a <code>String</code>.     *     * @throws XPathExpressionException If <code>expression</code> cannot be evaluated.     * @throws NullPointerException If <code>expression</code> is <code>null</code>.     */    public String evaluate(String expression, Object item)        throws XPathExpressionException {        return (String)this.evaluate( expression, item, XPathConstants.STRING );    }    /**     * <p>Compile an XPath expression for later evaluation.</p>     *     * <p>If <code>expression</code> contains any {@link XPathFunction}s,     * they must be available via the {@link XPathFunctionResolver}.     * An {@link XPathExpressionException} will be thrown if the <code>XPathFunction</code>     * cannot be resovled with the <code>XPathFunctionResolver</code>.</p>     *      * <p>If <code>expression</code> is <code>null</code>, a <code>NullPointerException</code> is thrown.</p>     *     * @param expression The XPath expression.     *     * @return Compiled XPath expression.     * @throws XPathExpressionException If <code>expression</code> cannot be compiled.     * @throws NullPointerException If <code>expression</code> is <code>null</code>.     */    public XPathExpression compile(String expression)        throws XPathExpressionException {        if ( expression == null ) {            String fmsg = XSLMessages.createXPATHMessage(                     XPATHErrorResources.ER_ARG_CANNOT_BE_NULL,                    new Object[] {"XPath expression"} );            throw new NullPointerException ( fmsg );        }        try {            com.sun.org.apache.xpath.internal.XPath xpath = new XPath (expression, null,                    prefixResolver, com.sun.org.apache.xpath.internal.XPath.SELECT );            // Can have errorListener            XPathExpressionImpl ximpl = new XPathExpressionImpl (xpath,                    prefixResolver, functionResolver, variableResolver,                    featureSecureProcessing );            return ximpl;        } catch ( javax.xml.transform.TransformerException te ) {            throw new XPathExpressionException ( te ) ;        }    }    /**     * <p>Evaluate an XPath expression in the context of the specified <code>InputSource</code>     * and return the result as the specified type.</p>     *     * <p>This method builds a data model for the {@link InputSource} and calls     * {@link #evaluate(String expression, Object item, QName returnType)} on the resulting document object.</p>     *     * <p>See "Evaluation of XPath Expressions" section of JAXP 1.3 spec      * for context item evaluation,     * variable, function and QName resolution and return type conversion.</p>     *     * <p>If <code>returnType</code> is not one of the types defined in {@link XPathConstants},     * then an <code>IllegalArgumentException</code> is thrown.</p>     *     * <p>If <code>expression</code>, <code>source</code> or <code>returnType</code> is <code>null</code>,     * then a <code>NullPointerException</code> is thrown.</p>     *     * @param expression The XPath expression.     * @param source The input source of the document to evaluate over.     * @param returnType The desired return type.     *     * @return The <code>Object</code> that encapsulates the result of evaluating the expression.     *     * @throws XPathExpressionException If expression cannot be evaluated.     * @throws IllegalArgumentException If <code>returnType</code> is not one of the types defined in {@link XPathConstants}.     * @throws NullPointerException If <code>expression</code>, <code>source</code> or <code>returnType</code>     *   is <code>null</code>.     */    public Object evaluate(String expression, InputSource source,             QName returnType) throws XPathExpressionException {        // Checking validity of different parameters        if( source== null ) {            String fmsg = XSLMessages.createXPATHMessage(                     XPATHErrorResources.ER_ARG_CANNOT_BE_NULL,                    new Object[] {"source"} );            throw new NullPointerException ( fmsg );        }        if ( expression == null ) {            String fmsg = XSLMessages.createXPATHMessage(                     XPATHErrorResources.ER_ARG_CANNOT_BE_NULL,                    new Object[] {"XPath expression"} );            throw new NullPointerException ( fmsg );        }        if ( returnType == null ) {            String fmsg = XSLMessages.createXPATHMessage(                     XPATHErrorResources.ER_ARG_CANNOT_BE_NULL,                    new Object[] {"returnType"} );            throw new NullPointerException ( fmsg );        }        //Checking if requested returnType is supported.         //returnType need to be defined in XPathConstants        if ( !isSupported ( returnType ) ) {            String fmsg = XSLMessages.createXPATHMessage(                    XPATHErrorResources.ER_UNSUPPORTED_RETURN_TYPE,                    new Object[] { returnType.toString() } );            throw new IllegalArgumentException ( fmsg );        }                try {            Document document = getParser().parse( source );            XObject resultObject = eval( expression, document );            return getResultAsType( resultObject, returnType );        } catch ( SAXException e ) {            throw new XPathExpressionException ( e );        } catch( IOException e ) {            throw new XPathExpressionException ( e );                    } catch ( javax.xml.transform.TransformerException te ) {            Throwable nestedException = te.getException();            if ( nestedException instanceof javax.xml.xpath.XPathFunctionException ) {                throw (javax.xml.xpath.XPathFunctionException)nestedException;            } else {                throw new XPathExpressionException ( te );            }        }    }      /**     * <p>Evaluate an XPath expression in the context of the specified <code>InputSource</code>     * and return the result as a <code>String</code>.</p>     *     * <p>This method calls {@link #evaluate(String expression, InputSource source, QName returnType)} with a     * <code>returnType</code> of {@link XPathConstants#STRING}.</p>     *     * <p>See "Evaluation of XPath Expressions" section of JAXP 1.3 spec     * for context item evaluation,     * variable, function and QName resolution and return type conversion.</p>     *     * <p>If <code>expression</code> or <code>source</code> is <code>null</code>,     * then a <code>NullPointerException</code> is thrown.</p>     *     * @param expression The XPath expression.     * @param source The <code>InputSource</code> of the document to evaluate over.     *     * @return The <code>String</code> that is the result of evaluating the expression and     *   converting the result to a <code>String</code>.     *     * @throws XPathExpressionException If expression cannot be evaluated.     * @throws NullPointerException If <code>expression</code> or <code>source</code> is <code>null</code>.     */    public String evaluate(String expression, InputSource source)        throws XPathExpressionException {        return (String)this.evaluate( expression, source, XPathConstants.STRING );    }    /**     * <p>Reset this <code>XPath</code> to its original configuration.</p>     *     * <p><code>XPath</code> is reset to the same state as when it was created with     * {@link XPathFactory#newXPath()}.     * <code>reset()</code> is designed to allow the reuse of existing <code>XPath</code>s     * thus saving resources associated with the creation of new <code>XPath</code>s.</p>     *     * <p>The reset <code>XPath</code> is not guaranteed to have the same     * {@link XPathFunctionResolver}, {@link XPathVariableResolver}     * or {@link NamespaceContext} <code>Object</code>s, e.g. {@link Object#equals(Object obj)}.     * It is guaranteed to have a functionally equal <code>XPathFunctionResolver</code>,     * <code>XPathVariableResolver</code>     * and <code>NamespaceContext</code>.</p>     */    public void reset() {        this.variableResolver = this.origVariableResolver;        this.functionResolver = this.origFunctionResolver;        this.namespaceContext = null;    } }

⌨️ 快捷键说明

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