Search in sources :

Example 71 with XPathContext

use of org.apache.xpath.XPathContext in project robovm by robovm.

the class PredicatedNodeTest method acceptNode.

//=============== NodeFilter Implementation ===============
/**
   *  Test whether a specified node is visible in the logical view of a
   * TreeWalker or NodeIterator. This function will be called by the
   * implementation of TreeWalker and NodeIterator; it is not intended to
   * be called directly from user code.
   * @param n  The node to check to see if it passes the filter or not.
   * @return  a constant to determine whether the node is accepted,
   *   rejected, or skipped, as defined  above .
   */
public short acceptNode(int n) {
    XPathContext xctxt = m_lpi.getXPathContext();
    try {
        xctxt.pushCurrentNode(n);
        XObject score = execute(xctxt, n);
        // System.out.println("\n::acceptNode - score: "+score.num()+"::");
        if (score != NodeTest.SCORE_NONE) {
            if (getPredicateCount() > 0) {
                countProximityPosition(0);
                if (!executePredicates(n, xctxt))
                    return DTMIterator.FILTER_SKIP;
            }
            return DTMIterator.FILTER_ACCEPT;
        }
    } catch (javax.xml.transform.TransformerException se) {
        // TODO: Fix this.
        throw new RuntimeException(se.getMessage());
    } finally {
        xctxt.popCurrentNode();
    }
    return DTMIterator.FILTER_SKIP;
}
Also used : XPathContext(org.apache.xpath.XPathContext) XObject(org.apache.xpath.objects.XObject)

Example 72 with XPathContext

use of org.apache.xpath.XPathContext in project robovm by robovm.

the class UnionChildIterator method acceptNode.

/**
   * Test whether a specified node is visible in the logical view of a
   * TreeWalker or NodeIterator. This function will be called by the
   * implementation of TreeWalker and NodeIterator; it is not intended to
   * be called directly from user code.
   * @param n  The node to check to see if it passes the filter or not.
   * @return  a constant to determine whether the node is accepted,
   *   rejected, or skipped, as defined  above .
   */
public short acceptNode(int n) {
    XPathContext xctxt = getXPathContext();
    try {
        xctxt.pushCurrentNode(n);
        for (int i = 0; i < m_nodeTests.length; i++) {
            PredicatedNodeTest pnt = m_nodeTests[i];
            XObject score = pnt.execute(xctxt, n);
            if (score != NodeTest.SCORE_NONE) {
                // Note that we are assuming there are no positional predicates!
                if (pnt.getPredicateCount() > 0) {
                    if (pnt.executePredicates(n, xctxt))
                        return DTMIterator.FILTER_ACCEPT;
                } else
                    return DTMIterator.FILTER_ACCEPT;
            }
        }
    } catch (javax.xml.transform.TransformerException se) {
        // TODO: Fix this.
        throw new RuntimeException(se.getMessage());
    } finally {
        xctxt.popCurrentNode();
    }
    return DTMIterator.FILTER_SKIP;
}
Also used : XPathContext(org.apache.xpath.XPathContext) XObject(org.apache.xpath.objects.XObject)

Example 73 with XPathContext

use of org.apache.xpath.XPathContext in project nokogiri by sparklemotion.

the class XmlXpathContext method getXPathContext.

private XPathContext getXPathContext(final NokogiriXPathFunctionResolver fnResolver) {
    Node doc = context.getNode().getOwnerDocument();
    if (doc == null)
        doc = context.getNode();
    XPathContext xpathContext = (XPathContext) doc.getUserData(XPATH_CONTEXT);
    if (xpathContext == null) {
        xpathContext = newXPathContext(fnResolver);
        if (variableResolver == null) {
            // NOTE: only caching without variables - could be improved by more sophisticated caching
            doc.setUserData(XPATH_CONTEXT, xpathContext, null);
        }
    } else {
        Object owner = xpathContext.getOwnerObject();
        if ((owner == null && fnResolver == null) || (owner instanceof JAXPExtensionsProvider && ((JAXPExtensionsProvider) owner).hasSameResolver(fnResolver))) {
            // can be re-used assuming it has the same variable-stack (for now only cached if no variables)
            if (variableResolver == null)
                return xpathContext;
        }
        // otherwise we can not use the cached xpath-context
        xpathContext = newXPathContext(fnResolver);
    }
    if (variableResolver != null) {
        xpathContext.setVarStack(new JAXPVariableStack(variableResolver));
    }
    return xpathContext;
}
Also used : JAXPVariableStack(org.apache.xpath.jaxp.JAXPVariableStack) Node(org.w3c.dom.Node) JAXPExtensionsProvider(org.apache.xpath.jaxp.JAXPExtensionsProvider) XPathContext(org.apache.xpath.XPathContext) RubyObject(org.jruby.RubyObject) IRubyObject(org.jruby.runtime.builtin.IRubyObject) XObject(org.apache.xpath.objects.XObject)

Aggregations

XPathContext (org.apache.xpath.XPathContext)73 TransformerException (javax.xml.transform.TransformerException)30 XObject (org.apache.xpath.objects.XObject)29 DTM (org.apache.xml.dtm.DTM)16 SAXException (org.xml.sax.SAXException)16 SerializationHandler (org.apache.xml.serializer.SerializationHandler)14 DTMIterator (org.apache.xml.dtm.DTMIterator)12 Vector (java.util.Vector)10 VariableStack (org.apache.xpath.VariableStack)8 NodeVector (org.apache.xml.utils.NodeVector)6 QName (org.apache.xml.utils.QName)6 ElemTemplateElement (org.apache.xalan.templates.ElemTemplateElement)4 StylesheetRoot (org.apache.xalan.templates.StylesheetRoot)4 IntStack (org.apache.xml.utils.IntStack)4 Expression (org.apache.xpath.Expression)4 XNodeSet (org.apache.xpath.objects.XNodeSet)4 XRTreeFrag (org.apache.xpath.objects.XRTreeFrag)4 Node (org.w3c.dom.Node)3 IOException (java.io.IOException)2 Hashtable (java.util.Hashtable)2