Class PrettyPrintWriter

All Implemented Interfaces:
ExtendedHierarchicalStreamWriter, HierarchicalStreamWriter, XmlFriendlyWriter
Direct Known Subclasses:
CompactWriter

public class PrettyPrintWriter extends AbstractXmlWriter
A simple writer that outputs XML in a pretty-printed indented stream.

By default, the chars
& < > " ' \r
are escaped and replaced with a suitable XML entity. To alter this behavior, override the writeText(com.thoughtworks.xstream.core.util.QuickWriter, String) and writeAttributeValue(com.thoughtworks.xstream.core.util.QuickWriter, String) methods.

The XML specification requires XML parsers to drop CR characters completely. This implementation will therefore use only a LF for line endings, never the platform encoding. You can overwrite the getNewLine() method for a different behavior.

Note: Depending on the XML version some characters cannot be written. Especially a 0 character is never valid in XML, neither directly nor as entity nor within CDATA. However, this writer works by default in a quirks mode, where it will write any character at least as character entity (even a null character). You may switch into XML_1_1 mode (which supports most characters) or XML_1_0 that does only support a very limited number of control characters. See XML specification for version 1.0 or 1.1. If a character is not supported, a StreamException is thrown. Select a proper parser implementation that respects the version in the XML header (the Xpp3 parser will also read character entities of normally invalid characters).

  • Field Details

    • XML_QUIRKS

      public static int XML_QUIRKS
    • XML_1_0

      public static int XML_1_0
    • XML_1_1

      public static int XML_1_1
    • writer

      private final QuickWriter writer
    • elementStack

      private final FastStack elementStack
    • lineIndenter

      private final char[] lineIndenter
    • mode

      private final int mode
    • tagInProgress

      private boolean tagInProgress
    • depth

      protected int depth
    • readyForNewLine

      private boolean readyForNewLine
    • tagIsEmpty

      private boolean tagIsEmpty
    • newLine

      private String newLine
    • NULL

      private static final char[] NULL
    • AMP

      private static final char[] AMP
    • LT

      private static final char[] LT
    • GT

      private static final char[] GT
    • CR

      private static final char[] CR
    • QUOT

      private static final char[] QUOT
    • APOS

      private static final char[] APOS
    • CLOSE

      private static final char[] CLOSE
  • Constructor Details

    • PrettyPrintWriter

      private PrettyPrintWriter(Writer writer, int mode, char[] lineIndenter, NameCoder nameCoder, String newLine)
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, char[] lineIndenter, String newLine, XmlFriendlyReplacer replacer)
      Deprecated.
      As of 1.3
      Since:
      1.2
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, int mode, char[] lineIndenter, NameCoder nameCoder)
      Since:
      1.4
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, int mode, char[] lineIndenter, XmlFriendlyReplacer replacer)
      Deprecated.
      Since:
      1.3
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, char[] lineIndenter, String newLine)
      Deprecated.
      As of 1.3
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, int mode, char[] lineIndenter)
      Since:
      1.3
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, char[] lineIndenter)
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, String lineIndenter, String newLine)
      Deprecated.
      As of 1.3
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, int mode, String lineIndenter)
      Since:
      1.3
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, String lineIndenter)
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, int mode, NameCoder nameCoder)
      Since:
      1.4
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, int mode, XmlFriendlyReplacer replacer)
      Deprecated.
      Since:
      1.3
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, NameCoder nameCoder)
      Since:
      1.4
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, XmlFriendlyReplacer replacer)
      Deprecated.
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer, int mode)
      Since:
      1.3
    • PrettyPrintWriter

      public PrettyPrintWriter(Writer writer)
  • Method Details

    • startNode

      public void startNode(String name)
    • startNode

      public void startNode(String name, Class clazz)
      Description copied from class: AbstractWriter
      Specified by:
      startNode in interface ExtendedHierarchicalStreamWriter
      Overrides:
      startNode in class AbstractWriter
    • setValue

      public void setValue(String text)
      Description copied from interface: HierarchicalStreamWriter
      Write the value (text content) of the current node.
    • addAttribute

      public void addAttribute(String key, String value)
    • writeAttributeValue

      protected void writeAttributeValue(QuickWriter writer, String text)
    • writeText

      protected void writeText(QuickWriter writer, String text)
    • writeText

      private void writeText(String text, boolean isAttribute)
    • endNode

      public void endNode()
    • finishTag

      private void finishTag()
    • endOfLine

      protected void endOfLine()
    • flush

      public void flush()
      Description copied from interface: HierarchicalStreamWriter
      Flush the writer, if necessary.
    • close

      public void close()
      Description copied from interface: HierarchicalStreamWriter
      Close the writer, if necessary.
    • getNewLine

      protected String getNewLine()
      Retrieve the line terminator. This method returns always a line feed, since according the XML specification any parser must ignore a carriage return. Overload this method, if you need different behavior.
      Returns:
      the line terminator
      Since:
      1.3