@Override public String getElementText() throws XMLStreamException { if (getEventType() != XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException("Parser must be on START_ELEMENT to read next text", getLocation()); } int eventType = next(); StringBuilder builder = new StringBuilder(); while (eventType != XMLStreamConstants.END_ELEMENT) { if (eventType == XMLStreamConstants.CHARACTERS || eventType == XMLStreamConstants.CDATA || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.ENTITY_REFERENCE) { builder.append(getText()); } else if (eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT) { // skipping } else if (eventType == XMLStreamConstants.END_DOCUMENT) { throw new XMLStreamException("Unexpected end of document when reading element text content", getLocation()); } else if (eventType == XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException("Element text content may not contain START_ELEMENT", getLocation()); } else { throw new XMLStreamException("Unexpected event type " + eventType, getLocation()); } eventType = next(); } return builder.toString(); }
@Override @Nullable public String getAttributeValue(@Nullable String namespaceURI, String localName) { for (int i = 0; i < getAttributeCount(); i++) { QName name = getAttributeName(i); if (name.getLocalPart().equals(localName) && (namespaceURI == null || name.getNamespaceURI().equals(namespaceURI))) { return getAttributeValue(i); } } return null; }
@Override public String getPrefix() { int eventType = getEventType(); if (eventType == XMLStreamConstants.START_ELEMENT || eventType == XMLStreamConstants.END_ELEMENT) { return getName().getPrefix(); } else { throw new IllegalStateException("Parser must be on START_ELEMENT or END_ELEMENT state"); } }
@Override public int nextTag() throws XMLStreamException { int eventType = next(); while (eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace() || eventType == XMLStreamConstants.CDATA && isWhiteSpace() || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT) { eventType = next(); } if (eventType != XMLStreamConstants.START_ELEMENT && eventType != XMLStreamConstants.END_ELEMENT) { throw new XMLStreamException("expected start or end tag", getLocation()); } return eventType; }
@Override public boolean hasName() { int eventType = getEventType(); return (eventType == XMLStreamConstants.START_ELEMENT || eventType == XMLStreamConstants.END_ELEMENT); }
JSONObject obj = new JSONObject( "{\"root\": {\"Type\":2,\"Value\":{\"rsp\":true,\"id\":\"5B721163\"}}}"); for (AbstractXMLStreamReader reader = new MappedXMLStreamReader(obj); reader .hasNext(); reader.next()) { String s = reader.getLocalName(); String t = reader.getText(); int evenType = reader.getEventType(); System.out.println(String.format( "Name: %s, text: %s, event type: %d", s, t, evenType)); }
@Override public char[] getTextCharacters() { return getText().toCharArray(); }
@Override public String getAttributePrefix(int index) { return getAttributeName(index).getPrefix(); }
@Override public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) { char[] source = getTextCharacters(); length = Math.min(length, source.length); System.arraycopy(source, sourceStart, target, targetStart, length); return length; }
@Override public String getNamespaceURI(String prefix) { return getNamespaceContext().getNamespaceURI(prefix); }
@Override public String getLocalName() { return getName().getLocalPart(); }
@Override public boolean isWhiteSpace() { return getEventType() == XMLStreamConstants.SPACE; }
@Override public int nextTag() throws XMLStreamException { int eventType = next(); while (eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace() || eventType == XMLStreamConstants.CDATA && isWhiteSpace() || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT) { eventType = next(); } if (eventType != XMLStreamConstants.START_ELEMENT && eventType != XMLStreamConstants.END_ELEMENT) { throw new XMLStreamException("expected start or end tag", getLocation()); } return eventType; }
@Override public int getTextLength() { return getText().length(); }
@Override public String getAttributeLocalName(int index) { return getAttributeName(index).getLocalPart(); }
@Override public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) { char[] source = getTextCharacters(); length = Math.min(length, source.length); System.arraycopy(source, sourceStart, target, targetStart, length); return length; }
@Override public String getNamespaceURI(String prefix) { return getNamespaceContext().getNamespaceURI(prefix); }
@Override public String getLocalName() { return getName().getLocalPart(); }
@Override public String getElementText() throws XMLStreamException { if (getEventType() != XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException("Parser must be on START_ELEMENT to read next text", getLocation()); } int eventType = next(); StringBuilder builder = new StringBuilder(); while (eventType != XMLStreamConstants.END_ELEMENT) { if (eventType == XMLStreamConstants.CHARACTERS || eventType == XMLStreamConstants.CDATA || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.ENTITY_REFERENCE) { builder.append(getText()); } else if (eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT) { // skipping } else if (eventType == XMLStreamConstants.END_DOCUMENT) { throw new XMLStreamException("Unexpected end of document when reading element text content", getLocation()); } else if (eventType == XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException("Element text content may not contain START_ELEMENT", getLocation()); } else { throw new XMLStreamException("Unexpected event type " + eventType, getLocation()); } eventType = next(); } return builder.toString(); }
@Override public boolean isStartElement() { return getEventType() == XMLStreamConstants.START_ELEMENT; }