Class IndentingXMLEventWriter

java.lang.Object
javanet.staxutils.helpers.EventWriterDelegate
javanet.staxutils.IndentingXMLEventWriter
All Implemented Interfaces:
Indentation, XMLEventConsumer, XMLEventWriter

public class IndentingXMLEventWriter extends EventWriterDelegate implements Indentation
A filter that indents an XML stream. To apply it, construct a filter that contains another XMLEventWriter, which you pass to the constructor. Then call methods of the filter instead of the contained stream. For example:
 XMLEventWriter stream = ...
 stream = new IndentingXMLEventWriter(stream);
 stream.add(...);
 

The filter inserts characters to format the document as an outline, with nested elements indented. Basically, it inserts a line break and whitespace before:

  • each DTD, processing instruction or comment that's not preceded by data
  • each starting tag that's not preceded by data
  • each ending tag that's preceded by nested elements but not data
This works well with 'data-oriented' XML, wherein each element contains either data or nested elements but not both. It can work badly with other styles of XML. For example, the data in a 'mixed content' document are apt to be polluted with indentation characters.

Indentation can be adjusted by setting the newLine and indent properties. But set them to whitespace only, for best results. Non-whitespace is apt to cause problems, for example when this class attempts to insert newLine before the root element.

Author:
Kohsuke Kawaguchi, John Kristian
  • Constructor Details

    • IndentingXMLEventWriter

      public IndentingXMLEventWriter(XMLEventWriter out)
  • Method Details

    • setIndent

      public void setIndent(String indent)
      Description copied from interface: Indentation
      Set the characters used for one level of indentation. The default is Indentation.DEFAULT_INDENT. "\t" is a popular alternative.
      Specified by:
      setIndent in interface Indentation
    • setNewLine

      public void setNewLine(String newLine)
      Description copied from interface: Indentation
      Set the characters that introduce a new line. The default is Indentation.NORMAL_END_OF_LINE. IndentingXMLStreamWriter.getLineSeparator()() is a popular alternative.
      Specified by:
      setNewLine in interface Indentation
    • getIndent

      public String getIndent()
      Description copied from interface: Indentation
      The characters used for one level of indentation.
      Specified by:
      getIndent in interface Indentation
    • getNewLine

      public String getNewLine()
      Description copied from interface: Indentation
      The characters that introduce a new line.
      Specified by:
      getNewLine in interface Indentation
    • getLineSeparator

      public static String getLineSeparator()
      Returns:
      System.getProperty("line.separator"); or Indentation.NORMAL_END_OF_LINE if that fails.
    • add

      public void add(XMLEvent event) throws XMLStreamException
      Specified by:
      add in interface XMLEventConsumer
      Specified by:
      add in interface XMLEventWriter
      Overrides:
      add in class EventWriterDelegate
      Throws:
      XMLStreamException
    • beforeMarkup

      protected void beforeMarkup()
      Prepare to write markup, by writing a new line and indentation.
    • afterMarkup

      protected void afterMarkup()
      Note that markup or indentation was written.
    • afterData

      protected void afterData()
      Note that data were written.
    • beforeStartElement

      protected void beforeStartElement()
      Prepare to start an element, by allocating stack space.
    • afterStartElement

      protected void afterStartElement()
      Note that an element was started.
    • beforeEndElement

      protected void beforeEndElement()
      Prepare to end an element, by writing a new line and indentation.
    • afterEndElement

      protected void afterEndElement()
      Note that an element was ended.
    • afterEndDocument

      protected void afterEndDocument()
      Note that a document was ended.