public interface XMLStreamReader extends XMLStreamConstants
This interface is similar to
javax.xml.stream.XMLStreamReader
; but it does not forces
dynamic allocation when parsing (its methods returns
CharArray
instances instead of String
).
Except for the speed (faster) and its real-time characteristics the usage/behavior is about the same as its StAX counterpart.
The CharArray
instances returned by this reader
supports fast primitive conversions as illustrated below.
// Creates a new reader (potentially recycled). XMLInputFactory factory = OSGiServices.getXMLInputFactory(); XMLStreamReader reader = factory.createXMLStreamReader(inputStream); while (reader.getEventType() != XMLStreamConstants.END_DOCUMENT) { switch (reader.next()) { case XMLStreamConstants.START_ELEMENT: if (reader.getLocalName().equals("Time")) { // Reads primitive types (int) attributes directly (no memory allocation). time.hour = reader.getAttributeValue(null, "hour").toInt(); time.minute = reader.getAttributeValue(null, "minute").toInt(); time.second = reader.getAttributeValue(null, "second").toInt(); } ... break; } } reader.close(); // Close the reader (does not close underlying input stream).
ATTRIBUTE, CDATA, CHARACTERS, COMMENT, DTD, END_DOCUMENT, END_ELEMENT, ENTITY_DECLARATION, ENTITY_REFERENCE, NAMESPACE, NOTATION_DECLARATION, PROCESSING_INSTRUCTION, SPACE, START_DOCUMENT, START_ELEMENT
Modifier and Type | Method and Description |
---|---|
void |
close()
Frees any resources associated with this Reader.
|
int |
getAttributeCount()
Returns the count of attributes on this START_ELEMENT, this method is
only valid on a START_ELEMENT or ATTRIBUTE.
|
CharArray |
getAttributeLocalName(int index)
Returns the localName of the attribute at the provided index.
|
CharArray |
getAttributeNamespace(int index)
Returns the namespace of the attribute at the provided index
|
CharArray |
getAttributePrefix(int index)
Returns the prefix of this attribute at the provided index
|
CharArray |
getAttributeType(int index)
Returns the XML type of the attribute at the provided index.
|
CharArray |
getAttributeValue(CharSequence namespaceURI,
CharSequence localName)
Returns the normalized attribute value of the attribute with the
namespace and localName.
|
CharArray |
getAttributeValue(int index)
Returns the value of the attribute at the index.
|
CharArray |
getCharacterEncodingScheme()
Returns the character encoding declared on the xml declaration.
|
CharArray |
getElementText()
Reads the content of a text-only element, an exception is thrown if this
is not a text-only element.
|
String |
getEncoding()
Returns the input encoding if known or
null if unknown. |
int |
getEventType()
Returns an integer code that indicates the type of the event the cursor
is pointing to.
|
CharArray |
getLocalName()
Returns the (local) name of the current event.
|
Location |
getLocation()
Return the current location of the processor.
|
NamespaceContext |
getNamespaceContext()
Returns a read only namespace context for the current position.
|
int |
getNamespaceCount()
Returns the count of namespaces declared on this START_ELEMENT or
END_ELEMENT.
|
CharArray |
getNamespacePrefix(int index)
Returns the prefix for the namespace declared at the index.
|
CharArray |
getNamespaceURI()
If the current event is a START_ELEMENT or END_ELEMENT this method
returns the URI of the current element (URI mapping to the prefix
element/attribute has; or if no prefix
null ). |
CharArray |
getNamespaceURI(CharSequence prefix)
Returns the uri for the given prefix.
|
CharArray |
getNamespaceURI(int index)
Returns the URI for the namespace declared at the index.
|
CharArray |
getPIData()
Get the data section of a processing instruction.
|
CharArray |
getPITarget()
Returns the target of a processing instruction.
|
CharArray |
getPrefix()
Returns the prefix of the current event or null if the event does not
have a prefix.
|
Object |
getProperty(String name)
Gets the value of a feature/property from the underlying implementation
|
CharArray |
getText()
Returns the current value of the parse event as a string, this returns
the string value of a CHARACTERS event, returns the value of a COMMENT,
the replacement value for an ENTITY_REFERENCE, the string value of a
CDATA section, the string value for a SPACE event, or the String value of
the internal subset of the DTD.
|
char[] |
getTextCharacters()
Returns an array which contains the characters from this event.
|
int |
getTextCharacters(int sourceStart,
char[] target,
int targetStart,
int length)
Gets the the text associated with a CHARACTERS, SPACE or CDATA event.
|
int |
getTextLength()
Returns the length of the sequence of characters for this Text event
within the text character array.
|
int |
getTextStart()
Returns the offset into the text character array where the first
character (of this text event) is stored.
|
CharArray |
getVersion()
Gets the xml version declared on the xml declaration.
|
boolean |
hasName()
Indicates if the current event has a name (is a START_ELEMENT or
END_ELEMENT).
|
boolean |
hasNext()
Returns true if there are more parsing events and false if there are no
more events.
|
boolean |
hasText()
Indicates if the current event has text.
|
boolean |
isAttributeSpecified(int index)
Indicates if this attribute was created by default.
|
boolean |
isCharacters()
Indicates if the cursor points to character data.
|
boolean |
isEndElement()
Indicates if the cursor points to an end tag.
|
boolean |
isStandalone()
Gets the standalone declaration from the xml declaration.
|
boolean |
isStartElement()
Indicates if the cursor points to a start tag.
|
boolean |
isWhiteSpace()
Indicates if the cursor points to character data that consists
of all whitespace.
|
int |
next()
Gets next parsing event - contiguous character data is returned into a
single chunk.
|
int |
nextTag()
Skips any white space (isWhiteSpace() returns true), COMMENT, or
PROCESSING_INSTRUCTION, until a START_ELEMENT or END_ELEMENT is reached.
|
void |
require(int type,
CharSequence namespaceURI,
CharSequence localName)
Tests if the current event is of the given type and if the namespace and
name match the current namespace and name of the current event.
|
boolean |
standaloneSet()
Checks if standalone was set in the document.
|
Object getProperty(String name) throws IllegalArgumentException
name
- the name of the property.IllegalArgumentException
int next() throws XMLStreamException
Given the following XML:
<foo><!--description-->content
text<![CDATA[<greeting>Hello</greeting>]]>other content</foo>
The behavior of calling next() when being on foo will be:
1- the comment (COMMENT)
2- then the characters section (CHARACTERS)
3- then the CDATA section (another CHARACTERS)
4- then the next characters section (another CHARACTERS)
5- then the END_ELEMENT
NOTE: empty element (such as <tag/>) will be reported with two separate events: START_ELEMENT, END_ELEMENT - This preserves parsing equivalency of empty element to <tag></tag>. This method will throw an IllegalStateException if it is called after hasNext() returns false.
NoSuchElementException
- if this is called when hasNext()
returns falseXMLStreamException
- if there is an error processing the
underlying XML sourcevoid require(int type, CharSequence namespaceURI, CharSequence localName) throws XMLStreamException
type
- the event type.namespaceURI
- the uri of the event, may be null.localName
- the localName of the event, may be null.XMLStreamException
- if the required values are not matched.CharArray 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(); StringBuffer content = new StringBuffer(); while (eventType != XMLStreamConstants.END_ELEMENT) { if (eventType == XMLStreamConstants.CHARACTERS || eventType == XMLStreamConstants.CDATA || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.ENTITY_REFERENCE) { buf.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", this); } 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 buf.toString();
XMLStreamException
- if the current event is not a START_ELEMENT
or if a non text element is encountered.int nextTag() throws XMLStreamException
int eventType = next(); while((eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace()) // skip whitespace || (eventType == XMLStreamConstants.CDATA && isWhiteSpace()) // skip whitespace || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT ) { eventType = next(); } if (eventType != XMLStreamConstants.START_ELEMENT && eventType != XMLStreamConstants.END_ELEMENT) { throw new String XMLStreamException("expected start or end tag", getLocation()); } return eventType;
XMLStreamException
- if the current event is not white space,
PROCESSING_INSTRUCTION, START_ELEMENT or END_ELEMENTNoSuchElementException
- if this is called when hasNext()
returns falseboolean hasNext() throws XMLStreamException
XMLStreamException
- if there is a fatal error detecting the next
state.void close() throws XMLStreamException
XMLStreamException
- if there are errors freeing associated
resourcesCharArray getNamespaceURI(CharSequence prefix)
NOTE:The 'xml' prefix is bound as defined in Namespaces in XML specification to "http://www.w3.org/XML/1998/namespace".
NOTE: The 'xmlns' prefix must be resolved to following namespace http://www.w3.org/2000/xmlns/
prefix
- the prefix to lookup.null
if it is
not boundboolean isStartElement()
true
if the cursor points to a start tag;
false
otherwise.boolean isEndElement()
true
if the cursor points to a end tag;
false
otherwise.boolean isCharacters()
true
if the cursor points to character data;
false
otherwise.boolean isWhiteSpace()
true
if the cursor points to whitespaces;
false
otherwise.CharArray getAttributeValue(CharSequence namespaceURI, CharSequence localName)
namespaceURI
- the namespace of the attribute or null
.localName
- the local name of the attribute.null
.IllegalStateException
- if not a START_ELEMENT or ATTRIBUTE.int getAttributeCount()
IllegalStateException
- if not a START_ELEMENT or ATTRIBUTE.CharArray getAttributeNamespace(int index)
index
- the position of the attribute.null
if no prefix.IllegalStateException
- if not a START_ELEMENT or ATTRIBUTE.CharArray getAttributeLocalName(int index)
index
- the position of the attribute.IllegalStateException
- if not a START_ELEMENT or ATTRIBUTE.CharArray getAttributePrefix(int index)
index
- the position of the attribute.null
if no prefix.IllegalStateException
- if not a START_ELEMENT or ATTRIBUTE.CharArray getAttributeType(int index)
index
- the position of the attributeIllegalStateException
- if not a START_ELEMENT or ATTRIBUTE.CharArray getAttributeValue(int index)
index
- the position of the attribute.IllegalStateException
- if not a START_ELEMENT or ATTRIBUTE.boolean isAttributeSpecified(int index)
index
- the position of the attribute.true
if this is a default attribute;
false
otherwise.IllegalStateException
- if not a START_ELEMENT or ATTRIBUTE.int getNamespaceCount()
IllegalStateException
- if not a START_ELEMENT or END_ELEMENT.CharArray getNamespacePrefix(int index)
index
- the position of the namespace declaration.null
if no prefix.IllegalStateException
- if this is not a START_ELEMENT,
END_ELEMENT or NAMESPACE.CharArray getNamespaceURI(int index)
index
- the position of the namespace declaration.null
if no prefix.IllegalStateException
- if this is not a START_ELEMENT,
END_ELEMENT or NAMESPACE.NamespaceContext getNamespaceContext()
int getEventType()
CharArray getText()
null
IllegalStateException
- if this state is not a valid text state.char[] getTextCharacters()
IllegalStateException
- if this state is not a valid text state.int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException
int length = 1024;
char[] myBuffer = new char[ length ];
for ( int sourceStart = 0 ; ; sourceStart += length )
{
int nCopied = stream.getTextCharacters( sourceStart, myBuffer, 0, length );
if (nCopied < length)
break;
}
XMLStreamException may be thrown
if there are any XML errors in the underlying source. The "targetStart"
argument must be greater than or equal to 0 and less than the length of
"target", Length must be greater than 0 and "targetStart + length" must
be less than or equal to length of "target".sourceStart
- the index of te first character in the source array
to copytarget
- the destination arraytargetStart
- the start offset in the target arraylength
- the number of characters to copyXMLStreamException
- if the XML source is not well-formed.IndexOutOfBoundsException
- if targetStart < 0 or > than the length of targetIndexOutOfBoundsException
- if length < 0 or targetStart + length > length of targetUnsupportedOperationException
- if this method is not supported.int getTextStart()
IllegalStateException
- if this state is not a valid text state.int getTextLength()
IllegalStateException
- if this state is not a valid text state.String getEncoding()
null
if unknown.boolean hasText()
true
if the current event as text;
false
otherwise.Location getLocation()
CharArray getLocalName()
IllegalStateException
- if this not a START_ELEMENT, END_ELEMENT
or ENTITY_REFERENCEboolean hasName()
true
if the current event has a name;
false
otherwise.CharArray getNamespaceURI()
null
).null
.IllegalStateException
- if not a START_ELEMENT, END_ELEMENT
or ATTRIBUTE.CharArray getPrefix()
null
IllegalStateException
- if not a START_ELEMENT or END_ELEMENT.CharArray getVersion()
null
boolean isStandalone()
true
if this is standalone;
false
otherwise.boolean standaloneSet()
true
if standalone was set;
false
otherwise.CharArray getCharacterEncodingScheme()
null
CharArray getPITarget()
IllegalStateException
- if the current event is not a
XMLStreamConstants.PROCESSING_INSTRUCTION
CharArray getPIData()
null
if the processing instruction only has target.IllegalStateException
- if the current event is not a
XMLStreamConstants.PROCESSING_INSTRUCTION
Copyright © 2005-2013 Javolution. All Rights Reserved.