/** * 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; }
/** * Add a node test to the union list. * * @param test reference to a NodeTest, which will be added directly to the list of node tests (in * other words, it will not be cloned). The parent of this test will be set to this object. */ public void addNodeTest(PredicatedNodeTest test) { // Increase array size by only 1 at a time. Fix this // if it looks to be a problem. if (null == m_nodeTests) { m_nodeTests = new PredicatedNodeTest[1]; m_nodeTests[0] = test; } else { PredicatedNodeTest[] tests = m_nodeTests; int len = m_nodeTests.length; m_nodeTests = new PredicatedNodeTest[len + 1]; System.arraycopy(tests, 0, m_nodeTests, 0, len); m_nodeTests[len] = test; } test.exprSetParent(this); }