@Override public void endElement(String uri, String localName, String name) throws SAXException { // Delegate to active handlers and deletes them if they are finished... activeHandlers.removeIf(handler -> handler.endElement(name)); }
@Override public void processingInstruction(String target, String data) throws SAXException { // Delegate to active handlers... for (SAX2DOMHandler handler : activeHandlers) { handler.processingInstruction(target, data); } }
@Override public void characters(char[] ch, int start, int length) throws SAXException { // Delegate to active handlers... String cData = new String(ch).substring(start, start + length); for (SAX2DOMHandler handler : activeHandlers) { handler.text(cData); } }
@Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { // Delegate to active handlers... for (SAX2DOMHandler handler : activeHandlers) { handler.createElement(name, attributes); } // Start a new handler is necessary NodeHandler handler = handlers.get(name); if (handler != null) { SAX2DOMHandler saxHandler = new SAX2DOMHandler(handler, documentBuilder.newDocument()); saxHandler.createElement(name, attributes); activeHandlers.add(saxHandler); } // Check if the user tried to interrupt parsing.... if (!taskContext.isActive()) { throw new UserInterruptException(); } }
protected boolean endElement(String name) { if (!currentNode.getNodeName().equals(name)) { throw new DOMException(DOMException.SYNTAX_ERR, "Unexpected end-tag: " + name + " expected: " + currentNode.getNodeName()); } return nodeUp(); }
private boolean nodeUp() { if (isComplete()) { nodeHandler.process(StructuredNode.of(root)); return true; } currentNode = currentNode.getParentNode(); return false; }