/** * 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); } }
/** * Gets the xpath as string with namespaces. * * @return a string like: /{namespaceX}elementA/{namespaceY}elementB/.. */ protected String getXPathWithNamespaces() { return getXPath(false, true); }
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(); }
private XMLChunk endChunk() throws XMLStreamException { Chunk chunk = m_chunkStack.removeFirst(); String content = chunk.getWriter().getChunkContent(); m_chunkWriterPool.release(chunk.getWriter()); Chunk parentChunk = m_chunkStack.isEmpty() ? null : m_chunkStack.getFirst(); return new XMLChunk(false, chunk.getXmlChunk().getXpath(), content, parentChunk != null ? parentChunk.getXmlChunk() : null); }
/** * Initiates reading an XML source and invokes the registered handlers. * * @param source * the source. * @throws XMLStreamException * if error occurs. */ public void read(final InputSource source) { Set<QName> qnames = qnameToChunkHandler.keySet(); XMLChunkIterator chunkIterator = new XMLChunkIterator(source, qnames.toArray(new QName[qnames.size()])); while (chunkIterator.hasNext()) { XMLChunk chunk = chunkIterator.next(); if (chunk.isStart()) { handleChunkStart(chunk); } else { handleChunkEnd(chunk); } } }
/** * 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()); }
/** * Gets the xpath as simple element string, without namespaces. * * @return a string like: /elementA/elementB/.. */ protected String getXPathSimple() { return getXPath(false, false); }