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;
}
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;
}
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;
}
Aggregations