Class XMLWriter
- java.lang.Object
-
- org.xml.sax.helpers.XMLFilterImpl
-
- org.dom4j.io.XMLWriter
-
- All Implemented Interfaces:
ContentHandler,DTDHandler,EntityResolver,ErrorHandler,LexicalHandler,XMLFilter,XMLReader
- Direct Known Subclasses:
HTMLWriter
public class XMLWriter extends XMLFilterImpl implements LexicalHandler
XMLWritertakes a DOM4J tree and formats it to a stream as XML. It can also take SAX events too so can be used by SAX clients as this object implements theContentHandlerandLexicalHandlerinterfaces. as well. This formatter performs typical document formatting. The XML declaration and processing instructions are always on their own lines. AnOutputFormatobject can be used to define how whitespace is handled when printing and allows various configuration options, such as to allow suppression of the XML declaration, the encoding declaration or whether empty documents are collapsed.There are
write(...)methods to print any of the standard DOM4J classes, includingDocumentandElement, to either aWriteror anOutputStream. Warning: using your ownWritermay cause the writer's preferred character encoding to be ignored. If you use encodings other than UTF8, we recommend using the method that takes an OutputStream instead.
-
-
Field Summary
Fields Modifier and Type Field Description protected static OutputFormatDEFAULT_FORMATprotected intlastOutputNodeTypeStores the last type of node written so algorithms can refer to the previous node typeprotected static String[]LEXICAL_HANDLER_NAMESprotected booleanpreserveStores the xml:space attribute value of preserve for whitespace flagprotected WriterwriterThe Writer used to output to
-
Constructor Summary
Constructors Constructor Description XMLWriter()XMLWriter(OutputStream out)XMLWriter(OutputStream out, OutputFormat format)XMLWriter(Writer writer)XMLWriter(Writer writer, OutputFormat format)XMLWriter(OutputFormat format)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcharacters(char[] ch, int start, int length)voidclose()Closes the underlying Writervoidcomment(char[] ch, int start, int length)protected WritercreateWriter(OutputStream outStream, String encoding)Get an OutputStreamWriter, use preferred encoding.protected intdefaultMaximumAllowedCharacter()Returns the maximum allowed character code that should be allowed unescaped which defaults to 127 in US-ASCII (7 bit) or 255 in ISO- (8 bit).voidendCDATA()voidendDocument()voidendDTD()voidendElement(String namespaceURI, String localName, String qName)voidendEntity(String name)voidendPrefixMapping(String prefix)protected StringescapeAttributeEntities(String text)This will take the pre-defined entities in XML 1.0 and convert their character representation to the appropriate entity reference, suitable for XML attributes.protected StringescapeElementEntities(String text)This will take the pre-defined entities in XML 1.0 and convert their character representation to the appropriate entity reference, suitable for XML attributes.voidflush()Flushes the underlying WriterLexicalHandlergetLexicalHandler()intgetMaximumAllowedCharacter()Returns the maximum allowed character code that should be allowed unescaped which defaults to 127 in US-ASCII (7 bit) or 255 in ISO- (8 bit).protected OutputFormatgetOutputFormat()Lets subclasses get at the current format object, so they can call setTrimText, setNewLines, etc.ObjectgetProperty(String name)protected voidhandleException(IOException e)voidignorableWhitespace(char[] ch, int start, int length)protected voidindent()protected voidinstallLexicalHandler()protected booleanisElementSpacePreserved(Element element)Determines if element is a special case of XML elements where it contains an xml:space attribute of "preserve".booleanisEscapeText()DOCUMENT ME!protected booleanisExpandEmptyElements()protected booleanisNamespaceDeclaration(Namespace ns)voidnotationDecl(String name, String publicID, String systemID)voidparse(InputSource source)voidprintln()Writes the new line text to the underlying WritervoidprocessingInstruction(String target, String data)booleanresolveEntityRefs()voidsetDocumentLocator(Locator locator)voidsetEscapeText(boolean escapeText)Sets whether text output should be escaped or not.voidsetIndentLevel(int indentLevel)Set the initial indentation level.voidsetLexicalHandler(LexicalHandler handler)voidsetMaximumAllowedCharacter(int maximumAllowedCharacter)Sets the maximum allowed character code that should be allowed unescaped such as 127 in US-ASCII (7 bit) or 255 in ISO- (8 bit) or -1 to not escape any characters (other than the special XML characters like < > &) If this is not explicitly set then it is defaulted from the encoding.voidsetOutputStream(OutputStream out)voidsetProperty(String name, Object value)voidsetResolveEntityRefs(boolean resolve)voidsetWriter(Writer writer)protected booleanshouldEncodeChar(int codepoint)Should the given character be escaped.voidstartCDATA()voidstartDocument()voidstartDTD(String name, String publicID, String systemID)voidstartElement(String namespaceURI, String localName, String qName, Attributes attributes)voidstartEntity(String name)voidstartPrefixMapping(String prefix, String uri)voidunparsedEntityDecl(String name, String publicID, String systemID, String notationName)voidwrite(Object object)Writes the given object which should be a String, a Node or a List of Nodes.voidwrite(String text)Print out aString, Perfoms the necessary entity escaping and whitespace stripping.voidwrite(Attribute attribute)Writes the givenAttribute.voidwrite(CDATA cdata)Writes the givenCDATA.voidwrite(Comment comment)Writes the givenComment.voidwrite(Document doc)This will print theDocumentto the current Writer.voidwrite(DocumentType docType)Writes the givenDocumentType.voidwrite(Element element)voidwrite(Entity entity)Writes the givenEntity.voidwrite(Namespace namespace)Writes the givenNamespace.voidwrite(Node node)Writes the givenNode.voidwrite(ProcessingInstruction processingInstruction)Writes the givenProcessingInstruction.voidwrite(Text text)Writes the givenText.protected voidwriteAttribute(Attribute attribute)protected voidwriteAttribute(Attributes attributes, int index)protected voidwriteAttributes(Element element)Writes the attributes of the given elementprotected voidwriteAttributes(Attributes attributes)protected voidwriteCDATA(String text)protected voidwriteClose(String qualifiedName)voidwriteClose(Element element)Writes the closing tag of anElementprotected voidwriteComment(String text)protected voidwriteDeclaration()This will write the declaration to the given Writer.protected voidwriteDocType(String name, String publicID, String systemID)protected voidwriteDocType(DocumentType docType)protected voidwriteElement(Element element)protected voidwriteElementContent(Element element)Outputs the content of the given element.protected voidwriteEmptyElementClose(String qualifiedName)protected voidwriteEntity(Entity entity)protected voidwriteEntityRef(String name)protected voidwriteEscapeAttributeEntities(String txt)protected voidwriteNamespace(String prefix, String uri)Writes the SAX namepsacesprotected voidwriteNamespace(Namespace namespace)protected voidwriteNamespaces()Writes the SAX namepsacesprotected voidwriteNamespaces(Element element)Writes all namespaces declared directly on element.protected voidwriteNode(Node node)protected voidwriteNodeText(Node node)This method is used to write out Nodes that contain text and still allow for xml:space to be handled properly.voidwriteOpen(Element element)protected voidwritePrintln()This will print a new line only if the newlines flag was set to trueprotected voidwriteProcessingInstruction(ProcessingInstruction pi)protected voidwriteString(String text)-
Methods inherited from class org.xml.sax.helpers.XMLFilterImpl
error, fatalError, getContentHandler, getDTDHandler, getEntityResolver, getErrorHandler, getFeature, getParent, parse, resolveEntity, setContentHandler, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setParent, skippedEntity, warning
-
-
-
-
Field Detail
-
LEXICAL_HANDLER_NAMES
protected static final String[] LEXICAL_HANDLER_NAMES
-
DEFAULT_FORMAT
protected static final OutputFormat DEFAULT_FORMAT
-
lastOutputNodeType
protected int lastOutputNodeType
Stores the last type of node written so algorithms can refer to the previous node type
-
preserve
protected boolean preserve
Stores the xml:space attribute value of preserve for whitespace flag
-
writer
protected Writer writer
The Writer used to output to
-
-
Constructor Detail
-
XMLWriter
public XMLWriter(Writer writer)
-
XMLWriter
public XMLWriter(Writer writer, OutputFormat format)
-
XMLWriter
public XMLWriter()
-
XMLWriter
public XMLWriter(OutputStream out) throws UnsupportedEncodingException
- Throws:
UnsupportedEncodingException
-
XMLWriter
public XMLWriter(OutputStream out, OutputFormat format) throws UnsupportedEncodingException
- Throws:
UnsupportedEncodingException
-
XMLWriter
public XMLWriter(OutputFormat format) throws UnsupportedEncodingException
- Throws:
UnsupportedEncodingException
-
-
Method Detail
-
setWriter
public void setWriter(Writer writer)
-
setOutputStream
public void setOutputStream(OutputStream out) throws UnsupportedEncodingException
- Throws:
UnsupportedEncodingException
-
isEscapeText
public boolean isEscapeText()
DOCUMENT ME!- Returns:
- true if text thats output should be escaped. This is enabled by default. It could be disabled if the output format is textual, like in XSLT where we can have xml, html or text output.
-
setEscapeText
public void setEscapeText(boolean escapeText)
Sets whether text output should be escaped or not. This is enabled by default. It could be disabled if the output format is textual, like in XSLT where we can have xml, html or text output.- Parameters:
escapeText- DOCUMENT ME!
-
setIndentLevel
public void setIndentLevel(int indentLevel)
Set the initial indentation level. This can be used to output a document (or, more likely, an element) starting at a given indent level, so it's not always flush against the left margin. Default: 0- Parameters:
indentLevel- the number of indents to start with
-
getMaximumAllowedCharacter
public int getMaximumAllowedCharacter()
Returns the maximum allowed character code that should be allowed unescaped which defaults to 127 in US-ASCII (7 bit) or 255 in ISO- (8 bit).- Returns:
- DOCUMENT ME!
-
setMaximumAllowedCharacter
public void setMaximumAllowedCharacter(int maximumAllowedCharacter)
Sets the maximum allowed character code that should be allowed unescaped such as 127 in US-ASCII (7 bit) or 255 in ISO- (8 bit) or -1 to not escape any characters (other than the special XML characters like < > &) If this is not explicitly set then it is defaulted from the encoding.- Parameters:
maximumAllowedCharacter- The maximumAllowedCharacter to set
-
flush
public void flush() throws IOExceptionFlushes the underlying Writer- Throws:
IOException- DOCUMENT ME!
-
close
public void close() throws IOExceptionCloses the underlying Writer- Throws:
IOException- DOCUMENT ME!
-
println
public void println() throws IOExceptionWrites the new line text to the underlying Writer- Throws:
IOException- DOCUMENT ME!
-
write
public void write(Attribute attribute) throws IOException
Writes the givenAttribute.- Parameters:
attribute-Attributeto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(Document doc) throws IOException
This will print the
Documentto the current Writer.Warning: using your own Writer may cause the writer's preferred character encoding to be ignored. If you use encodings other than UTF8, we recommend using the method that takes an OutputStream instead.
Note: as with all Writers, you may need to flush() yours after this method returns.
- Parameters:
doc-Documentto format.- Throws:
IOException- if there's any problem writing.
-
write
public void write(Element element) throws IOException
Writes the
, including itsElements, and its value, and all its content (child nodes) to the current Writer.Attribute- Parameters:
element-Elementto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(CDATA cdata) throws IOException
Writes the givenCDATA.- Parameters:
cdata-CDATAto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(Comment comment) throws IOException
Writes the givenComment.- Parameters:
comment-Commentto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(DocumentType docType) throws IOException
Writes the givenDocumentType.- Parameters:
docType-DocumentTypeto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(Entity entity) throws IOException
Writes the givenEntity.- Parameters:
entity-Entityto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(Namespace namespace) throws IOException
Writes the givenNamespace.- Parameters:
namespace-Namespaceto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(ProcessingInstruction processingInstruction) throws IOException
Writes the givenProcessingInstruction.- Parameters:
processingInstruction-ProcessingInstructionto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(String text) throws IOException
Print out a
String, Perfoms the necessary entity escaping and whitespace stripping.- Parameters:
text- is the text to output- Throws:
IOException- DOCUMENT ME!
-
write
public void write(Text text) throws IOException
Writes the givenText.- Parameters:
text-Textto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(Node node) throws IOException
Writes the givenNode.- Parameters:
node-Nodeto output.- Throws:
IOException- DOCUMENT ME!
-
write
public void write(Object object) throws IOException
Writes the given object which should be a String, a Node or a List of Nodes.- Parameters:
object- is the object to output.- Throws:
IOException- DOCUMENT ME!
-
writeOpen
public void writeOpen(Element element) throws IOException
- Parameters:
element-Elementto output.- Throws:
IOException- DOCUMENT ME!
-
writeClose
public void writeClose(Element element) throws IOException
Writes the closing tag of an
Element- Parameters:
element-Elementto output.- Throws:
IOException- DOCUMENT ME!
-
parse
public void parse(InputSource source) throws IOException, SAXException
- Specified by:
parsein interfaceXMLReader- Overrides:
parsein classXMLFilterImpl- Throws:
IOExceptionSAXException
-
setProperty
public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException
- Specified by:
setPropertyin interfaceXMLReader- Overrides:
setPropertyin classXMLFilterImpl- Throws:
SAXNotRecognizedExceptionSAXNotSupportedException
-
getProperty
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
- Specified by:
getPropertyin interfaceXMLReader- Overrides:
getPropertyin classXMLFilterImpl- Throws:
SAXNotRecognizedExceptionSAXNotSupportedException
-
setLexicalHandler
public void setLexicalHandler(LexicalHandler handler)
-
getLexicalHandler
public LexicalHandler getLexicalHandler()
-
setDocumentLocator
public void setDocumentLocator(Locator locator)
- Specified by:
setDocumentLocatorin interfaceContentHandler- Overrides:
setDocumentLocatorin classXMLFilterImpl
-
startDocument
public void startDocument() throws SAXException- Specified by:
startDocumentin interfaceContentHandler- Overrides:
startDocumentin classXMLFilterImpl- Throws:
SAXException
-
endDocument
public void endDocument() throws SAXException- Specified by:
endDocumentin interfaceContentHandler- Overrides:
endDocumentin classXMLFilterImpl- Throws:
SAXException
-
startPrefixMapping
public void startPrefixMapping(String prefix, String uri) throws SAXException
- Specified by:
startPrefixMappingin interfaceContentHandler- Overrides:
startPrefixMappingin classXMLFilterImpl- Throws:
SAXException
-
endPrefixMapping
public void endPrefixMapping(String prefix) throws SAXException
- Specified by:
endPrefixMappingin interfaceContentHandler- Overrides:
endPrefixMappingin classXMLFilterImpl- Throws:
SAXException
-
startElement
public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
- Specified by:
startElementin interfaceContentHandler- Overrides:
startElementin classXMLFilterImpl- Throws:
SAXException
-
endElement
public void endElement(String namespaceURI, String localName, String qName) throws SAXException
- Specified by:
endElementin interfaceContentHandler- Overrides:
endElementin classXMLFilterImpl- Throws:
SAXException
-
characters
public void characters(char[] ch, int start, int length) throws SAXException- Specified by:
charactersin interfaceContentHandler- Overrides:
charactersin classXMLFilterImpl- Throws:
SAXException
-
ignorableWhitespace
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException- Specified by:
ignorableWhitespacein interfaceContentHandler- Overrides:
ignorableWhitespacein classXMLFilterImpl- Throws:
SAXException
-
processingInstruction
public void processingInstruction(String target, String data) throws SAXException
- Specified by:
processingInstructionin interfaceContentHandler- Overrides:
processingInstructionin classXMLFilterImpl- Throws:
SAXException
-
notationDecl
public void notationDecl(String name, String publicID, String systemID) throws SAXException
- Specified by:
notationDeclin interfaceDTDHandler- Overrides:
notationDeclin classXMLFilterImpl- Throws:
SAXException
-
unparsedEntityDecl
public void unparsedEntityDecl(String name, String publicID, String systemID, String notationName) throws SAXException
- Specified by:
unparsedEntityDeclin interfaceDTDHandler- Overrides:
unparsedEntityDeclin classXMLFilterImpl- Throws:
SAXException
-
startDTD
public void startDTD(String name, String publicID, String systemID) throws SAXException
- Specified by:
startDTDin interfaceLexicalHandler- Throws:
SAXException
-
endDTD
public void endDTD() throws SAXException- Specified by:
endDTDin interfaceLexicalHandler- Throws:
SAXException
-
startCDATA
public void startCDATA() throws SAXException- Specified by:
startCDATAin interfaceLexicalHandler- Throws:
SAXException
-
endCDATA
public void endCDATA() throws SAXException- Specified by:
endCDATAin interfaceLexicalHandler- Throws:
SAXException
-
startEntity
public void startEntity(String name) throws SAXException
- Specified by:
startEntityin interfaceLexicalHandler- Throws:
SAXException
-
endEntity
public void endEntity(String name) throws SAXException
- Specified by:
endEntityin interfaceLexicalHandler- Throws:
SAXException
-
comment
public void comment(char[] ch, int start, int length) throws SAXException- Specified by:
commentin interfaceLexicalHandler- Throws:
SAXException
-
writeElement
protected void writeElement(Element element) throws IOException
- Throws:
IOException
-
isElementSpacePreserved
protected final boolean isElementSpacePreserved(Element element)
Determines if element is a special case of XML elements where it contains an xml:space attribute of "preserve". If it does, then retain whitespace.- Parameters:
element- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
writeElementContent
protected void writeElementContent(Element element) throws IOException
Outputs the content of the given element. If whitespace trimming is enabled then all adjacent text nodes are appended together before the whitespace trimming occurs to avoid problems with multiple text nodes being created due to text content that spans parser buffers in a SAX parser.- Parameters:
element- DOCUMENT ME!- Throws:
IOException- DOCUMENT ME!
-
writeCDATA
protected void writeCDATA(String text) throws IOException
- Throws:
IOException
-
writeDocType
protected void writeDocType(DocumentType docType) throws IOException
- Throws:
IOException
-
writeNamespace
protected void writeNamespace(Namespace namespace) throws IOException
- Throws:
IOException
-
writeNamespaces
protected void writeNamespaces() throws IOExceptionWrites the SAX namepsaces- Throws:
IOException- DOCUMENT ME!
-
writeNamespace
protected void writeNamespace(String prefix, String uri) throws IOException
Writes the SAX namepsaces- Parameters:
prefix- the prefixuri- the namespace uri- Throws:
IOException- DOCUMENT ME!
-
writeNamespaces
protected void writeNamespaces(Element element) throws IOException
Writes all namespaces declared directly on element.- Throws:
IOException
-
writeProcessingInstruction
protected void writeProcessingInstruction(ProcessingInstruction pi) throws IOException
- Throws:
IOException
-
writeString
protected void writeString(String text) throws IOException
- Throws:
IOException
-
writeNodeText
protected void writeNodeText(Node node) throws IOException
This method is used to write out Nodes that contain text and still allow for xml:space to be handled properly.- Parameters:
node- DOCUMENT ME!- Throws:
IOException- DOCUMENT ME!
-
writeNode
protected void writeNode(Node node) throws IOException
- Throws:
IOException
-
installLexicalHandler
protected void installLexicalHandler()
-
writeDocType
protected void writeDocType(String name, String publicID, String systemID) throws IOException
- Throws:
IOException
-
writeEntity
protected void writeEntity(Entity entity) throws IOException
- Throws:
IOException
-
writeEntityRef
protected void writeEntityRef(String name) throws IOException
- Throws:
IOException
-
writeComment
protected void writeComment(String text) throws IOException
- Throws:
IOException
-
writeAttributes
protected void writeAttributes(Element element) throws IOException
Writes the attributes of the given element- Parameters:
element- DOCUMENT ME!- Throws:
IOException- DOCUMENT ME!
-
writeAttribute
protected void writeAttribute(Attribute attribute) throws IOException
- Throws:
IOException
-
writeAttributes
protected void writeAttributes(Attributes attributes) throws IOException
- Throws:
IOException
-
writeAttribute
protected void writeAttribute(Attributes attributes, int index) throws IOException
- Throws:
IOException
-
indent
protected void indent() throws IOException- Throws:
IOException
-
writePrintln
protected void writePrintln() throws IOExceptionThis will print a new line only if the newlines flag was set to true
- Throws:
IOException- DOCUMENT ME!
-
createWriter
protected Writer createWriter(OutputStream outStream, String encoding) throws UnsupportedEncodingException
Get an OutputStreamWriter, use preferred encoding.- Parameters:
outStream- DOCUMENT ME!encoding- DOCUMENT ME!- Returns:
- DOCUMENT ME!
- Throws:
UnsupportedEncodingException- DOCUMENT ME!
-
writeDeclaration
protected void writeDeclaration() throws IOExceptionThis will write the declaration to the given Writer. Assumes XML version 1.0 since we don't directly know.
- Throws:
IOException- DOCUMENT ME!
-
writeClose
protected void writeClose(String qualifiedName) throws IOException
- Throws:
IOException
-
writeEmptyElementClose
protected void writeEmptyElementClose(String qualifiedName) throws IOException
- Throws:
IOException
-
isExpandEmptyElements
protected boolean isExpandEmptyElements()
-
escapeElementEntities
protected String escapeElementEntities(String text)
This will take the pre-defined entities in XML 1.0 and convert their character representation to the appropriate entity reference, suitable for XML attributes.- Parameters:
text- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
writeEscapeAttributeEntities
protected void writeEscapeAttributeEntities(String txt) throws IOException
- Throws:
IOException
-
escapeAttributeEntities
protected String escapeAttributeEntities(String text)
This will take the pre-defined entities in XML 1.0 and convert their character representation to the appropriate entity reference, suitable for XML attributes.- Parameters:
text- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
shouldEncodeChar
protected boolean shouldEncodeChar(int codepoint)
Should the given character be escaped. This depends on the encoding of the document.- Parameters:
codepoint- Unicode codepoint. DOCUMENT ME!- Returns:
- boolean
-
defaultMaximumAllowedCharacter
protected int defaultMaximumAllowedCharacter()
Returns the maximum allowed character code that should be allowed unescaped which defaults to 127 in US-ASCII (7 bit) or 255 in ISO- (8 bit).- Returns:
- DOCUMENT ME!
-
isNamespaceDeclaration
protected boolean isNamespaceDeclaration(Namespace ns)
-
handleException
protected void handleException(IOException e) throws SAXException
- Throws:
SAXException
-
getOutputFormat
protected OutputFormat getOutputFormat()
Lets subclasses get at the current format object, so they can call setTrimText, setNewLines, etc. Put in to support the HTMLWriter, in the way that it pushes the current newline/trim state onto a stack and overrides the state within preformatted tags.- Returns:
- DOCUMENT ME!
-
resolveEntityRefs
public boolean resolveEntityRefs()
-
setResolveEntityRefs
public void setResolveEntityRefs(boolean resolve)
-
-