/** Note: calling this method will move stream to the next non-textual event. */ protected String collectAllText(XMLStreamReader sr) throws XMLStreamException { StringBuilder sb = new StringBuilder(100); while (true) { int type = sr.getEventType(); if (type == CHARACTERS || type == SPACE || type == CDATA) { sb.append(sr.getText()); sr.next(); } else { break; } } return sb.toString(); }
/** @see IBailsStream#getCharSequence() */ @Override public CharSequence getCharSequence() { // This should contain the tags char sequence along with any surrounding whitespace. return currentEventString.toString(); }
/** @see IBailsStream#next() */ @Override public void next() { try { currentEventString.setLength(0); // Clear the xml events char sequence. currentEvent = this.parser.nextEvent(); // get the next event. ELEMENT_TYPE previousType = type; // Record the previous type to check for openClose tags. // Search for the next start/end document/element or a character event. while (currentEvent.getEventType() != START_DOCUMENT && currentEvent.getEventType() != START_ELEMENT && currentEvent.getEventType() != CHARACTERS && currentEvent.getEventType() != END_ELEMENT && currentEvent.getEventType() != END_DOCUMENT) { currentEvent = this.parser.nextEvent(); } switch (currentEvent.getEventType()) { case START_DOCUMENT: type = ELEMENT_TYPE.DOCUMENT_START; break; case START_ELEMENT: if (this.parser.peek().getEventType() == END_ELEMENT) type = ELEMENT_TYPE.OPENCLOSE; else type = ELEMENT_TYPE.OPEN; break; case END_ELEMENT: type = ELEMENT_TYPE.CLOSE; break; case CHARACTERS: type = ELEMENT_TYPE.CHARACTERS; break; case END_DOCUMENT: type = ELEMENT_TYPE.DOCUMENT_END; break; } // If we are at the start or end of the document don't do any more processing. if (type != ELEMENT_TYPE.DOCUMENT_START && type != ELEMENT_TYPE.DOCUMENT_END) { // Add the white space that should be at the start of the char sequence. currentEventString.append(preWhiteSpace); // Add char sequence of the current event. currentEventString.append(currentEvent); // Get the white space that should be at the end of this char sequence as well as the white // space that // should be before the next. checkForNewLine(); // Add the white space that should be at the end of the char sequence. currentEventString.append(postWhiteSpace); // If this is an opening tag any attributes will need be recorded. if (currentEvent.getEventType() == START_ELEMENT) { attributes = parsAttributes((StartElement) currentEvent); // Pars the start events attributes. if (bailsTag) type = ELEMENT_TYPE.BAILS; // If this is a bails tag set it to the correct type. } else { // Otherwise there should be no attributes. attributes = null; } } } catch (XMLStreamException e) { System.out.println("SORT THIS OUT!: " + e.getMessage()); } }