|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.znerd.xmlenc.XMLOutputter
Stream-based XML outputter. Instances of this class are able to write XML
output to Writers
.
standalone
attribute is not supported in the XML
declaration.IllegalStateException
will be thrown.
If any of the writing methods generates an IOException
, then
the state will be set to XMLEventListenerStates.ERROR_STATE
and no more output can be
performed.
XMLOutputter
instances
write to buffered Writers
. This typically improves
performance on large documents or relatively slow or blocking output
streams.
Instances of this class can be cached in a pool to reduce object
creations. Call reset()
(with no arguments) when storing an
instance in the pool. Use reset(Writer,String)
(with 2 arguments)
to re-initialize the instance after fetching it from the pool.
Field Summary | |
static String |
DEFAULT_INDENTATION
Default indentation. |
Fields inherited from interface org.znerd.xmlenc.XMLEventListenerStates |
AFTER_ROOT_ELEMENT, BEFORE_DTD_DECLARATION, BEFORE_ROOT_ELEMENT, BEFORE_XML_DECLARATION, DOCUMENT_ENDED, ERROR_STATE, START_TAG_OPEN, UNINITIALIZED, WITHIN_ELEMENT |
Constructor Summary | |
XMLOutputter()
Constructs a new XMLOutputter . |
|
XMLOutputter(Writer out,
String encoding)
Constructs a new XMLOutputter for the specified
Writer and encoding. |
|
XMLOutputter(Writer out,
XMLEncoder encoder)
Constructs a new XMLOutputter for the specified
Writer and encoder . |
Method Summary | |
void |
attribute(String name,
String value)
Adds an attribute to the current element. |
void |
cdata(String text)
Writes a CDATA section. |
void |
close()
Closes all open elements. |
void |
comment(String text)
Writes the specified comment. |
void |
declaration()
Writes the XML declaration. |
void |
dtd(String name,
String publicID,
String systemID)
Writes a document type declaration. |
void |
endDocument()
Ends the XML output. |
void |
endTag()
Writes an element end tag. |
String[] |
getElementStack()
Returns a copy of the element stack. |
int |
getElementStackCapacity()
Returns the current capacity for the stack of open elements. |
int |
getElementStackSize()
Returns the current depth of open elements. |
String |
getEncoding()
Returns the encoding of this outputter. |
String |
getIndentation()
Returns the string currently used for indentation. |
LineBreak |
getLineBreak()
Returns the currently used line break. |
char |
getQuotationMark()
Gets the quotation mark character. |
XMLEventListenerState |
getState()
Returns the current state of this outputter. |
Writer |
getWriter()
Returns the output stream this outputter uses. |
boolean |
isEscaping()
Checks if escaping is currently enabled. |
void |
pcdata(char[] ch,
int start,
int length)
Writes the specified character array as PCDATA. |
void |
pcdata(String text)
Writes the specified String as PCDATA. |
void |
pi(String target,
String instruction)
Writes a processing instruction. |
void |
reset()
Resets this XMLOutputter . |
void |
reset(Writer out,
String encoding)
Resets this XMLOutputter and configures it for the
specified output stream and encoding. |
void |
reset(Writer out,
XMLEncoder encoder)
Resets this XMLOutputter and configures it for the
specified output stream and encoder. |
void |
setElementStackCapacity(int newCapacity)
Sets the capacity for the stack of open elements. |
void |
setEscaping(boolean escapeAmpersands)
Sets if ampersands should be escaped. |
void |
setIndentation(String indentation)
Sets the string to be used for indentation. |
void |
setLineBreak(LineBreak lineBreak)
Sets the type of line break to use. |
void |
setQuotationMark(char c)
Sets the quotation mark character to use. |
void |
setState(XMLEventListenerState newState,
String[] newElementStack)
Sets the state of this outputter. |
void |
startTag(String type)
Writes an element start tag. |
void |
whitespace(char[] ch,
int start,
int length)
Writes text from the specified character array as ignorable whitespace. |
void |
whitespace(String whitespace)
Writes the specified ignorable whitespace. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final String DEFAULT_INDENTATION
""
, since by
default no indentation is performed.
Constructor Detail |
public XMLOutputter()
XMLOutputter
. This sets the state to
XMLEventListenerStates.UNINITIALIZED
.
public XMLOutputter(Writer out, String encoding) throws IllegalStateException, IllegalArgumentException, UnsupportedEncodingException
XMLOutputter
for the specified
Writer
and encoding. This sets the state to
XMLEventListenerStates.BEFORE_XML_DECLARATION
.
The encoding will be stored exactly as passed, leaving the case
intact.
out
- the output stream to write to, not null
.encoding
- the encoding, not null
.
IllegalStateException
- if getState() != XMLEventListenerStates.UNINITIALIZED
&&
getState() != XMLEventListenerStates.AFTER_ROOT_ELEMENT
&&
getState() != XMLEventListenerStates.ERROR_STATE
.
IllegalArgumentException
- if out == null || encoding == null
.
UnsupportedEncodingException
- if the specified encoding is not supported.public XMLOutputter(Writer out, XMLEncoder encoder) throws IllegalStateException, IllegalArgumentException, UnsupportedEncodingException
XMLOutputter
for the specified
Writer
and encoder
. This sets the state to
XMLEventListenerStates.BEFORE_XML_DECLARATION
.
out
- the output stream to write to, not null
.encoder
- the encoder, not null
.
IllegalStateException
- if getState() != XMLEventListenerStates.UNINITIALIZED
&&
getState() != XMLEventListenerStates.AFTER_ROOT_ELEMENT
&&
getState() != XMLEventListenerStates.ERROR_STATE
.
IllegalArgumentException
- if out == null || encoder == null
.
UnsupportedEncodingException
- if the specified encoding is not supported.Method Detail |
public final Writer getWriter()
null
if and
only if the state is XMLEventListenerStates.UNINITIALIZED
.public final String getEncoding()
null
if and
only if the state is XMLEventListenerStates.UNINITIALIZED
.public void reset()
XMLOutputter
. The Writer
and the
encoding will be set to null
, the element stack will be
cleared, the state will be set to XMLEventListenerStates.UNINITIALIZED
, the line break
will be set to LineBreak.NONE
and the indentation will be set to
DEFAULT_INDENTATION
(an empty string).
reset
in interface XMLEventListener
public final void reset(Writer out, String encoding) throws IllegalArgumentException, UnsupportedEncodingException
XMLOutputter
and configures it for the
specified output stream and encoding. This resets the state to
XMLEventListenerStates.BEFORE_XML_DECLARATION
and clears the stack of open elements.
out
- the output stream to write to, not null
.encoding
- the encoding, not null
.
IllegalArgumentException
- if out == null || encoding == null
.
UnsupportedEncodingException
- if the specified encoding is not supported.public final void reset(Writer out, XMLEncoder encoder) throws IllegalArgumentException, UnsupportedEncodingException
XMLOutputter
and configures it for the
specified output stream and encoder. This resets the state to
XMLEventListenerStates.BEFORE_XML_DECLARATION
and clears the stack of open elements.
out
- the output stream to write to, not null
.encoder
- the encoder, not null
.
IllegalArgumentException
- if out == null || encoder == null
.
UnsupportedEncodingException
- if the specified encoding is not supported.public final void setState(XMLEventListenerState newState, String[] newElementStack) throws IllegalArgumentException
XMLEventListenerStates.UNINITIALIZED
as the state is
equivalent to calling reset()
.
Caution: This method can be used to let this class generate invalid
XML.
setState
in interface XMLEventListener
newState
- the new state, not null
.newElementStack
- the new element stack, if newState == START_TAG_OPEN
|| newState == WITHIN_ELEMENT
then it should be
non-null
and containing no null
elements,
otherwise it must be null
.
IllegalArgumentException
- if newState == null
|| (newState == XMLEventListenerStates.START_TAG_OPEN
&& newElementStack == null)
|| (newState == XMLEventListenerStates.WITHIN_ELEMENT
&& newElementStack == null)
|| (newState != XMLEventListenerStates.START_TAG_OPEN
&& newState != XMLEventListenerStates.WITHIN_ELEMENT
&& newElementStack != null)
|| newElementStack[n] == null
(where 0 <= n < newElementStack.length
).public final XMLEventListenerState getState()
getState
in interface StatefulXMLEventListener
null
.public final boolean isEscaping()
'&'
) are replaced by the
character entity reference "&"
. This affects
PCDATA string printing (pcdata(String)
and
pcdata(char[],int,int)
) and attribute value printing
(attribute(String,String)
).
true
if escaping is enabled, false
otherwise.public final void setEscaping(boolean escapeAmpersands)
pcdata(String)
and
pcdata(char[],int,int)
) and attribute value printing
(attribute(String,String)
).
If ampersands are not escaped, then entity references can be
printed.
escapeAmpersands
- true
if ampersands should be escaped, false
otherwise.public final String[] getElementStack()
getElementStackSize()
.
null
if there are no
elements on the stack.public final int getElementStackSize()
public final int getElementStackCapacity()
getElementStackSize()
.public final void setElementStackCapacity(int newCapacity) throws IllegalArgumentException, OutOfMemoryError
newCapacity
- the new capacity, >= getElementStackSize()
.
IllegalArgumentException
- if newCapacity < getElementStackSize()
.
OutOfMemoryError
- if a new array cannot be allocated; this object will still be usable,
but the capacity will remain unchanged.public final void setQuotationMark(char c) throws IllegalArgumentException
'"'
.
c
- the character to put around attribute values, either
'\''
or '"'
.
IllegalArgumentException
- if c != '\'' && c != '"'
.public final char getQuotationMark()
'"'
.
'\''
or '"'
.public final void setLineBreak(LineBreak lineBreak)
LineBreak.NONE
, then the indentation is reset to an empty
string.
lineBreak
- the line break to use; specifying null
as the argument
is equivalent to specifying LineBreak.NONE
.public final LineBreak getLineBreak()
null
.public final void setIndentation(String indentation) throws IllegalStateException
Only space and tab characters are allowed for the indentation.
indentation
- the character string used for indentation, or null
if
the default indentation
should be used.
IllegalStateException
- if getLineBreak()
== LineBreak.NONE
.
IllegalArgumentException
- if indentation contains characters that are neither a
space nor a tab.
public final String getIndentation()
null
.public final void declaration() throws IllegalStateException, IOException
"ISO-8859-1"
, then this
method will produce the following output:
<?xml version="1.0" encoding="ISO-8859-1"?>
declaration
in interface XMLEventListener
IllegalStateException
- if getState() != XMLEventListenerStates.BEFORE_XML_DECLARATION
.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void dtd(String name, String publicID, String systemID) throws IllegalStateException, IllegalArgumentException, InvalidXMLException, IOException
-//W3C//DTD XHTML 1.0 Transitional//EN
while the system identifier is:
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
The output is typically similar to this:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
or alternatively, if only the system identifier is specified:
<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
dtd
in interface XMLEventListener
name
- the name of the document type, not null
.publicID
- the public identifier, can be null
, but if not, then it
must match the
PubidLiteral production
in the XML 1.0 Specification, when quoted.systemID
- the system identifier, can be null
, but if not, then
it must match the
SystemLiteral production
in the XML 1.0 Specification, when quoted.
IllegalStateException
- if getState() != XMLEventListenerStates.BEFORE_XML_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_DTD_DECLARATION
.
IllegalArgumentException
- if name == null ||
(publicID != null && systemID == null)
.
InvalidXMLException
- if the specified name does not match the
Name production
(see XMLChecker.checkName(String)
).
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void startTag(String type) throws IllegalStateException, IllegalArgumentException, IOException
startTag
in interface XMLEventListener
type
- the type of the tag to start, not null
.
IllegalStateException
- if getState() != XMLEventListenerStates.BEFORE_XML_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_DTD_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_ROOT_ELEMENT
&&
getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
.
IllegalArgumentException
- if type == null
.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void attribute(String name, String value) throws IllegalStateException, IllegalArgumentException, IOException
attribute
in interface XMLEventListener
name
- the name of the attribute, not null
.value
- the value of the attribute, not null
.
IllegalStateException
- if getState() != XMLEventListenerStates.START_TAG_OPEN
.
IllegalArgumentException
- if name == null || value == null
.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void endTag() throws IllegalStateException, IOException
endTag
in interface XMLEventListener
IllegalStateException
- if getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void pcdata(String text) throws IllegalStateException, IllegalArgumentException, InvalidXMLException, IOException
String
as PCDATA.
pcdata
in interface XMLEventListener
text
- the PCDATA text to be written, not null
.
IllegalStateException
- if getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
IllegalArgumentException
- if text == null
.
InvalidXMLException
- if the specified text contains an invalid character.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void pcdata(char[] ch, int start, int length) throws IllegalStateException, IllegalArgumentException, IndexOutOfBoundsException, InvalidXMLException, IOException
pcdata
in interface XMLEventListener
ch
- the character array containing the text to be written, not
null
.start
- the start index in the array, must be >= 0 and it must be <
ch.length
.length
- the number of characters to read from the array, must be > 0.
IllegalStateException
- if getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
IllegalArgumentException
- if ch == null
|| start < 0
|| start >= ch.length
|| length < 0
.
IndexOutOfBoundsException
- if start + length > ch.length
.
InvalidXMLException
- if the specified text contains an invalid character.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void whitespace(String whitespace) throws IllegalStateException, IllegalArgumentException, InvalidXMLException, IOException
XMLEventListenerStates.BEFORE_XML_DECLARATION
, then it will be set to
XMLEventListenerStates.BEFORE_DTD_DECLARATION
, otherwise if the state is
XMLEventListenerStates.START_TAG_OPEN
then it will be set to XMLEventListenerStates.WITHIN_ELEMENT
,
otherwise the state will not be changed.
whitespace
in interface XMLEventListener
whitespace
- the ignorable whitespace to be written, not null
.
IllegalStateException
- if getState() != XMLEventListenerStates.BEFORE_XML_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_DTD_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_ROOT_ELEMENT
&&
getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
&&
getState() != XMLEventListenerStates.AFTER_ROOT_ELEMENT
.
IllegalArgumentException
- if whitespace == null
.
InvalidXMLException
- if the specified character string contains a character that is
invalid as whitespace.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void whitespace(char[] ch, int start, int length) throws IllegalStateException, IllegalArgumentException, IndexOutOfBoundsException, InvalidXMLException, IOException
XMLEventListenerStates.BEFORE_XML_DECLARATION
, then it will be set to
XMLEventListenerStates.BEFORE_DTD_DECLARATION
, otherwise if the state is
XMLEventListenerStates.START_TAG_OPEN
then it will be set to XMLEventListenerStates.WITHIN_ELEMENT
,
otherwise the state will not be changed.
whitespace
in interface XMLEventListener
ch
- the character array containing the text to be written, not
null
.start
- the start index in the array, must be >= 0 and it must be <
ch.length
.length
- the number of characters to read from the array, must be > 0.
IllegalStateException
- if getState() != XMLEventListenerStates.BEFORE_XML_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_DTD_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_ROOT_ELEMENT
&&
getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
&&
getState() != XMLEventListenerStates.AFTER_ROOT_ELEMENT
.
IllegalArgumentException
- if ch == null
|| start < 0
|| start >= ch.length
|| length < 0
.
IndexOutOfBoundsException
- if start + length > ch.length
.
InvalidXMLException
- if the specified character string contains a character that is
invalid as whitespace.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void comment(String text) throws IllegalStateException, IllegalArgumentException, InvalidXMLException, IOException
"--"
.
If the state equals XMLEventListenerStates.BEFORE_XML_DECLARATION
, then it will be set to
XMLEventListenerStates.BEFORE_DTD_DECLARATION
, otherwise if the state is
XMLEventListenerStates.START_TAG_OPEN
then it will be set to XMLEventListenerStates.WITHIN_ELEMENT
,
otherwise the state will not be changed.
comment
in interface XMLEventListener
text
- the text for the comment be written, not null
.
IllegalStateException
- if getState() != XMLEventListenerStates.BEFORE_XML_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_DTD_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_ROOT_ELEMENT
&&
getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
&&
getState() != XMLEventListenerStates.AFTER_ROOT_ELEMENT
.
IllegalArgumentException
- if text == null
.
InvalidXMLException
- if the specified text contains an invalid character.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void pi(String target, String instruction) throws IllegalStateException, IllegalArgumentException, IOException
XMLEventListenerStates.BEFORE_XML_DECLARATION
, then it will be set to
XMLEventListenerStates.BEFORE_DTD_DECLARATION
, otherwise the state will not be
changed.
pi
in interface XMLEventListener
target
- an identification of the application at which the instruction is
targeted, not null
.instruction
- the instruction, can be null
, which is equivalent to an
empty string.
IllegalStateException
- if getState() != XMLEventListenerStates.BEFORE_XML_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_DTD_DECLARATION
&&
getState() != XMLEventListenerStates.BEFORE_ROOT_ELEMENT
&&
getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
&&
getState() != XMLEventListenerStates.AFTER_ROOT_ELEMENT
.
IllegalArgumentException
- if target == null
.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void cdata(String text) throws IllegalStateException, IllegalArgumentException, IOException
"]]>"
. This will, however, not be checked by this
method.
Left angle brackets and ampersands will be output in their literal
form; they need not (and cannot) be escaped using
"<"
and "&"
.
If the specified string is empty (i.e.
"".equals(text)
, then nothing will be output.
If the specified string contains characters that cannot be printed
in this encoding, then the result is undefined.
cdata
in interface XMLEventListener
text
- the contents of the CDATA section, not null
.
IllegalStateException
- if getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
IllegalArgumentException
- if text == null
.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void close() throws IllegalStateException, IOException
whitespace(String)
method can be called.
If you would like to flush the output stream as well, call
endDocument()
instead.
IllegalStateException
- if getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
&&
getState() != XMLEventListenerStates.AFTER_ROOT_ELEMENT
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.public final void endDocument() throws IllegalStateException, IOException
getWriter()
.flush()
.
After calling this method, no more output can be
written until this outputter is reset.
endDocument
in interface XMLEventListener
IllegalStateException
- if getState() != XMLEventListenerStates.START_TAG_OPEN
&&
getState() != XMLEventListenerStates.WITHIN_ELEMENT
&&
getState() != XMLEventListenerStates.AFTER_ROOT_ELEMENT
.
IOException
- if an I/O error occurs; this will set the state to
XMLEventListenerStates.ERROR_STATE
.
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |