private XMLChunk startChunk(List<QName> path) throws XMLStreamException { Chunk parentChunk = m_chunkStack.isEmpty() ? null : m_chunkStack.getFirst(); XMLChunk parent = null; if (parentChunk != null) { XMLChunk old = parentChunk.getXmlChunk(); parent = new XMLChunk(true, old.getXpath(), parentChunk.getWriter().getChunkContent(), old .getParent()); // replace old parent chunk with new content which is maybe before the child element parentChunk.setXmlChunk(parent); } Chunk chunk = new Chunk(new XMLChunk(true, asList(path), parent), m_chunkWriterPool.acquire()); m_chunkStack.addFirst(chunk); return chunk.getXmlChunk(); }
/** * Handles a chunk start. */ private void handleChunkStart(final XMLChunk chunk) { List<QName> xpath = Collections.unmodifiableList(chunk.getXpath()); XMLChunkHandler handler = getHandler(chunk.getStartElement()); if (chunk.hasParent()) { XMLChunk parentChunk = chunk.getParent(); XMLChunkHandler parentHandler = getHandler(parentChunk.getStartElement()); parentHandler.handleChunkBeforChildHandler( xpath, parentChunk.getStartElement(), parentChunk.getChunk(), chunk.getStartElement(), handler); } handler.handleChunkStart(xpath, chunk.getStartElement()); }
/** * Handler function of the end chunk event. */ private void handleChunkEnd(final XMLChunk chunk) { List<QName> xpath = Collections.unmodifiableList(chunk.getXpath()); XMLChunkHandler handler = getHandler(chunk.getStartElement()); handler.handleChunkEnd(xpath, chunk.getStartElement(), chunk.getChunk()); if (chunk.hasParent()) { XMLChunk parentChunk = chunk.getParent(); XMLChunkHandler parentHandler = getHandler(parentChunk.getStartElement()); parentHandler.handleChunkAfterChildHandler( xpath, parentChunk.getStartElement(), parentChunk.getChunk(), chunk.getStartElement(), handler); } }