public abstract class AbstractXMLOutputProcessor extends AbstractOutputProcessor implements XMLOutputProcessor
XMLOutputProcessor
for supporting the XMLOutputter.
This class is marked abstract even though all methods are fully implemented.
The process*(...) methods are public because they match the
XMLOutputProcessor interface but the remaining methods are all protected.
People who want to create a custom XMLOutputProcessor for XMLOutputter are
able to extend this class and modify any functionality they want. Before
sub-classing this you should first check to see if the Format class
can get you the results you want.
Subclasses of this should have reentrant methods. This is easiest to accomplish simply by not allowing any instance fields. If your sub-class has an instance field/variable, then it's probably broken.
One significant feature of this implementation is that it creates and
maintains both a NamespaceStack and FormatStack that are
managed in the
printElement(Writer, FormatStack, NamespaceStack, Element) method.
The stacks are pushed and popped in that method only. They significantly
improve the performance and readability of the code.
The NamespaceStack is only sent through to the
printElement(Writer, FormatStack, NamespaceStack, Element) and
printContent(Writer, FormatStack, NamespaceStack, Walker) methods,
but the FormatStack is pushed through to all print* Methods.
In XML the concept of 'Text' can be loosely defined as anything that can be
found between an Element's start and end tags, excluding Comments and
Processing Instructions. When considered from a JDOM perspective, this means
Text, CDATA and EntityRef content. This will be
referred to as 'Text-like content'
XMLOutputter delegates the management and formatting of Content to a
Walker instance. See Walker and its various implementations for
details on how the Element content is processed.
Because the Walker interface specifies that Text/CDATA content may be
returned as either Text/CDATA instances or as formatted String values
this class sometimes uses printCDATA(...) and printText(...), and sometimes
uses the more direct textCDATA(Writer, String) or
textRaw(Writer, String) as
appropriate. In other words, subclasses should probably override these second
methods instead of the print methods.
Non-text content is processed via the respective print* methods. The usage should be logical based on the method name.
The general observations are:
write(...) methods. Thus, all other methods do their
respective processing and delegate the actual destination output to the
write(Writer, char) or write(Writer, String) methods.
All Text-like content (printCDATA, printText, and printEntityRef) will ultimately be output through the the text* methods (and no other content).
XMLOutputter,
XMLOutputProcessor| Modifier and Type | Field and Description |
|---|---|
protected static java.lang.String |
CDATAPOST
Simple constant for a close-CDATA
|
protected static java.lang.String |
CDATAPRE
Simple constant for an open-CDATA
|
| Constructor and Description |
|---|
AbstractXMLOutputProcessor() |
| Modifier and Type | Method and Description |
|---|---|
protected void |
attributeEscapedEntitiesFilter(java.io.Writer out,
FormatStack fstack,
java.lang.String value)
This will take the three pre-defined entities in XML 1.0 ('<', '>',
and '&' - used specifically in XML elements) as well as CR/NL and
Quote characters which require escaping inside Attribute values and
convert their character representation to the appropriate entity
reference suitable for XML attribute content.
|
protected void |
printAttribute(java.io.Writer out,
FormatStack fstack,
Attribute attribute)
This will handle printing of an
. |
protected void |
printCDATA(java.io.Writer out,
FormatStack fstack,
CDATA cdata)
This will handle printing of a
CDATA. |
protected void |
printComment(java.io.Writer out,
FormatStack fstack,
Comment comment)
This will handle printing of a
Comment. |
protected void |
printContent(java.io.Writer out,
FormatStack fstack,
NamespaceStack nstack,
Walker walker)
This will handle printing of a List of
Content. |
protected void |
printDeclaration(java.io.Writer out,
FormatStack fstack)
This will handle printing of the XML declaration.
|
protected void |
printDocType(java.io.Writer out,
FormatStack fstack,
DocType docType)
This will handle printing of a
DocType. |
protected void |
printDocument(java.io.Writer out,
FormatStack fstack,
NamespaceStack nstack,
Document doc)
This will handle printing of a
Document. |
protected void |
printElement(java.io.Writer out,
FormatStack fstack,
NamespaceStack nstack,
Element element)
This will handle printing of an
Element. |
protected void |
printEntityRef(java.io.Writer out,
FormatStack fstack,
EntityRef entity)
This will handle printing of an
EntityRef. |
protected void |
printNamespace(java.io.Writer out,
FormatStack fstack,
Namespace ns)
This will handle printing of any needed
declarations. |
protected void |
printProcessingInstruction(java.io.Writer out,
FormatStack fstack,
ProcessingInstruction pi)
This will handle printing of a
ProcessingInstruction. |
protected void |
printText(java.io.Writer out,
FormatStack fstack,
Text text)
This will handle printing of a
Text. |
void |
process(java.io.Writer out,
Format format,
CDATA cdata)
Print out a
node. |
void |
process(java.io.Writer out,
Format format,
Comment comment)
Print out a
. |
void |
process(java.io.Writer out,
Format format,
DocType doctype)
Print out the
. |
void |
process(java.io.Writer out,
Format format,
Document doc)
This will print the
to the given Writer. |
void |
process(java.io.Writer out,
Format format,
Element element)
|
void |
process(java.io.Writer out,
Format format,
EntityRef entity)
Print out a
. |
void |
process(java.io.Writer out,
Format format,
java.util.List<? extends Content> list)
This will handle printing out a list of nodes.
|
void |
process(java.io.Writer out,
Format format,
ProcessingInstruction pi)
Print out a
. |
void |
process(java.io.Writer out,
Format format,
Text text)
Print out a
node. |
protected void |
textCDATA(java.io.Writer out,
java.lang.String text)
Write a
CDATA to the destination |
protected void |
textEntityRef(java.io.Writer out,
java.lang.String name)
Write an
EntityRef to the destination. |
protected void |
textRaw(java.io.Writer out,
char ch)
Convenience method that simply passes the input char to
write(Writer, char). |
protected void |
textRaw(java.io.Writer out,
java.lang.String str)
Convenience method that simply passes the input str to
write(Writer, String). |
protected void |
write(java.io.Writer out,
char c)
Write a single character to the output Writer.
|
protected void |
write(java.io.Writer out,
java.lang.String str)
Print some string value to the output.
|
buildWalkerprotected static final java.lang.String CDATAPRE
protected static final java.lang.String CDATAPOST
public void process(java.io.Writer out,
Format format,
Document doc)
throws java.io.IOException
XMLOutputProcessorDocument to the given Writer.
Warning: using your own Writer may cause the outputter's preferred character encoding to be ignored. If you use encodings other than UTF-8, we recommend using the method that takes an OutputStream instead.
process in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output styledoc - Document to format.java.io.IOException - if there's any problem writing.public void process(java.io.Writer out,
Format format,
DocType doctype)
throws java.io.IOException
XMLOutputProcessorDocType.process in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output styledoctype - DocType to output.java.io.IOException - if there's any problem writing.public void process(java.io.Writer out,
Format format,
Element element)
throws java.io.IOException
XMLOutputProcessorprocess in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output styleelement - Element to output.java.io.IOException - if there's any problem writing.public void process(java.io.Writer out,
Format format,
java.util.List<? extends Content> list)
throws java.io.IOException
XMLOutputProcessorprocess in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output stylelist - List of nodes.java.io.IOException - if there's any problem writing.public void process(java.io.Writer out,
Format format,
CDATA cdata)
throws java.io.IOException
XMLOutputProcessorCDATA node.process in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output stylecdata - CDATA to output.java.io.IOException - if there's any problem writing.public void process(java.io.Writer out,
Format format,
Text text)
throws java.io.IOException
XMLOutputProcessorText node. Performs the necessary entity
escaping and whitespace stripping.process in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output styletext - Text to output.java.io.IOException - if there's any problem writing.public void process(java.io.Writer out,
Format format,
Comment comment)
throws java.io.IOException
XMLOutputProcessorComment.process in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output stylecomment - Comment to output.java.io.IOException - if there's any problem writing.public void process(java.io.Writer out,
Format format,
ProcessingInstruction pi)
throws java.io.IOException
XMLOutputProcessorProcessingInstruction.process in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output stylepi - ProcessingInstruction to output.java.io.IOException - if there's any problem writing.public void process(java.io.Writer out,
Format format,
EntityRef entity)
throws java.io.IOException
XMLOutputProcessorEntityRef.process in interface XMLOutputProcessorout - Writer to use.format - Format instance specifying output styleentity - EntityRef to output.java.io.IOException - if there's any problem writing.protected void write(java.io.Writer out,
java.lang.String str)
throws java.io.IOException
out - The Writer to write to.str - The String to write (can be null).java.io.IOException - if the out Writer fails.protected void write(java.io.Writer out,
char c)
throws java.io.IOException
out - The Writer to write to.c - The char to write.java.io.IOException - if the Writer fails.protected void attributeEscapedEntitiesFilter(java.io.Writer out,
FormatStack fstack,
java.lang.String value)
throws java.io.IOException
Note: If FormatStack.getEscapeOutput() is false then no
escaping will happen.
out - The destination Writerfstack - The FormatStackvalue - String Attribute value to escape.java.io.IOException - if the destination Writer fails.IllegalDataException - if an entity can not be escapedprotected void textRaw(java.io.Writer out,
java.lang.String str)
throws java.io.IOException
write(Writer, String). This could be useful for subclasses to
hook in to. All text-type output will come through this or the
textRaw(Writer, char) method.out - the destination writer.str - the String to write.java.io.IOException - if the Writer fails.protected void textRaw(java.io.Writer out,
char ch)
throws java.io.IOException
write(Writer, char). This could be useful for subclasses to hook
in to. All text-type output will come through this or the
textRaw(Writer, String) method.out - the destination Writer.ch - the char to write.java.io.IOException - if the Writer fails.protected void textEntityRef(java.io.Writer out,
java.lang.String name)
throws java.io.IOException
EntityRef to the destination.out - the destination Writer.name - the EntityRef's name.java.io.IOException - if the Writer fails.protected void textCDATA(java.io.Writer out,
java.lang.String text)
throws java.io.IOException
CDATA to the destinationout - the destination Writertext - the CDATA textjava.io.IOException - if the Writer fails.protected void printDocument(java.io.Writer out,
FormatStack fstack,
NamespaceStack nstack,
Document doc)
throws java.io.IOException
Document.out - Writer to use.fstack - the FormatStacknstack - the NamespaceStackdoc - Document to write.java.io.IOException - if the destination Writer failsprotected void printDeclaration(java.io.Writer out,
FormatStack fstack)
throws java.io.IOException
out - Writer to use.fstack - the FormatStackjava.io.IOException - if the destination Writer failsprotected void printDocType(java.io.Writer out,
FormatStack fstack,
DocType docType)
throws java.io.IOException
DocType.out - Writer to use.fstack - the FormatStackdocType - DocType to write.java.io.IOException - if the destination Writer failsprotected void printProcessingInstruction(java.io.Writer out,
FormatStack fstack,
ProcessingInstruction pi)
throws java.io.IOException
ProcessingInstruction.out - Writer to use.fstack - the FormatStackpi - ProcessingInstruction to write.java.io.IOException - if the destination Writer failsprotected void printComment(java.io.Writer out,
FormatStack fstack,
Comment comment)
throws java.io.IOException
Comment.out - Writer to use.fstack - the FormatStackcomment - Comment to write.java.io.IOException - if the destination Writer failsprotected void printEntityRef(java.io.Writer out,
FormatStack fstack,
EntityRef entity)
throws java.io.IOException
EntityRef.out - Writer to use.fstack - the FormatStackentity - EntotyRef to write.java.io.IOException - if the destination Writer failsprotected void printCDATA(java.io.Writer out,
FormatStack fstack,
CDATA cdata)
throws java.io.IOException
CDATA.out - Writer to use.fstack - the FormatStackcdata - CDATA to write.java.io.IOException - if the destination Writer failsprotected void printText(java.io.Writer out,
FormatStack fstack,
Text text)
throws java.io.IOException
Text.out - Writer to use.fstack - the FormatStacktext - Text to write.java.io.IOException - if the destination Writer failsprotected void printElement(java.io.Writer out,
FormatStack fstack,
NamespaceStack nstack,
Element element)
throws java.io.IOException
Element.
This method arranges for outputting the Element infrastructure including Namespace Declarations and Attributes.
out - Writer to use.fstack - the FormatStacknstack - the NamespaceStackelement - Element to write.java.io.IOException - if the destination Writer failsprotected void printContent(java.io.Writer out,
FormatStack fstack,
NamespaceStack nstack,
Walker walker)
throws java.io.IOException
Content.
The list of Content is basically processed as one of three types of content
printCDATA(Writer, FormatStack, CDATA), or
printComment(Writer, FormatStack, Comment),
out - Writer to use.fstack - the FormatStacknstack - the NamespaceStackwalker - Walker of Content to write.java.io.IOException - if the destination Writer failsprotected void printNamespace(java.io.Writer out,
FormatStack fstack,
Namespace ns)
throws java.io.IOException
Namespace
declarations.out - Writer to use.fstack - The current FormatStackns - Namespace to print definition ofjava.io.IOException - if the output failsprotected void printAttribute(java.io.Writer out,
FormatStack fstack,
Attribute attribute)
throws java.io.IOException
Attribute.out - Writer to use.fstack - The current FormatStackattribute - Attribute to outputjava.io.IOException - if the output failsCopyright © 2021 Jason Hunter, Brett McLaughlin. All Rights Reserved.