@Test public void selectParentChild_2() throws XPathException, SAXException, PermissionDeniedException { NameTest test = new NameTest(Type.ELEMENT, new QName("SPEAKER", "")); NodeSet speakers = broker .getStructuralIndex() .findElementsByTagName(ElementValue.ELEMENT, docs, test.getName(), null); Sequence largeSet = executeQuery(broker, "//SPEECH/LINE[fn:contains(., 'love')]/ancestor::SPEECH", 187, null); NodeSet result = NodeSetHelper.selectParentChild(speakers, largeSet.toNodeSet(), NodeSet.DESCENDANT, -1); assertEquals(187, result.getLength()); }
@Test public void selectParentChild() throws XPathException, SAXException, PermissionDeniedException { NameTest test = new NameTest(Type.ELEMENT, new QName("SPEAKER", "")); NodeSet speakers = broker .getStructuralIndex() .findElementsByTagName(ElementValue.ELEMENT, docs, test.getName(), null); Sequence smallSet = executeQuery( broker, "//SPEECH/LINE[fn:contains(., 'perturbed spirit')]/ancestor::SPEECH", 1, null); NodeSet result = NodeSetHelper.selectParentChild(speakers, smallSet.toNodeSet(), NodeSet.DESCENDANT, -1); assertEquals(1, result.getLength()); String value = serialize(broker, result.itemAt(0)); assertEquals(value, "<SPEAKER>HAMLET</SPEAKER>"); }
/** * Check if any child nodes are found within this node set for a given set of potential ancestor * nodes. * * <p>If mode is {@link #DESCENDANT}, the returned node set will contain all child nodes found in * this node set for each parent node. If mode is {@link #ANCESTOR}, the returned set will contain * those parent nodes, for which children have been found. * * @param al a node set containing potential parent nodes * @param mode selection mode * @param contextId used to track context nodes when evaluating predicate expressions. If * contextId != {@link Expression#NO_CONTEXT_ID}, the current context will be added to each * result of the of the selection. */ public NodeSet selectParentChild(NodeSet al, int mode, int contextId) { return NodeSetHelper.selectParentChild(this, al, mode, contextId); }