@Override protected boolean stop(ElementHandler handler) { return type.isInstance(handler.getParseNode().getValue()); } }
protected boolean stream(ElementHandler handler) { return (handler.getParseNode().getValue() != null) && type.isAssignableFrom(handler.getParseNode().getValue().getClass()); } }
@Override protected void endElementInternal(ElementHandler handler) { object = null; if (stop(handler)) { object = handler.getParseNode().getValue(); // remove this node from parse tree if (handler.getParentHandler() instanceof ElementHandler) { ElementHandler parent = (ElementHandler) handler.getParentHandler(); ((NodeImpl) parent.getParseNode()).removeChild(handler.getParseNode()); } } }
protected void endElementInternal(ElementHandler handler) { super.endElementInternal(handler); if (stream(handler)) { // throw value into buffer buffer.put(handler.getParseNode().getValue()); // remove this node from parse tree if (handler.getParentHandler() instanceof ElementHandler) { ElementHandler parent = (ElementHandler) handler.getParentHandler(); ((NodeImpl) parent.getParseNode()).removeChild(handler.getParseNode()); // parent.endChildHandler(handler); } } }
protected boolean stream(ElementHandler handler) { // create an xpath context from the root element // TODO: cache the context, should work just the same // JXPathIntrospector.registerDynamicClass(ElementHandlerImpl.class, // ElementHandlerPropertyHandler.class); JXPathIntrospector.registerDynamicClass(NodeImpl.class, NodePropertyHandler.class); // ElementHandler rootHandler = // ((DocumentHandler) handlers.firstElement()).getDocumentElementHandler(); Node root = ((DocumentHandler) handlers.firstElement()).getParseNode(); JXPathContext jxpContext = JXPathContextFactory.newInstance().newContext(null, root); jxpContext.setLenient(true); Iterator itr = jxpContext.iterate(xpath); while (itr.hasNext()) { Object obj = itr.next(); if (handler.getParseNode().equals(obj)) { return true; } } return false; } }