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 and MX parsers will also read character entities of normally invalid characters). You may also switch to XML_1_0_REPLACEMENT or XML_1_1_REPLACEMENT mode, which will replace the invalid characters with a U+FFFD replacement character.

  • Field Details

    • XML_QUIRKS

      public static int XML_QUIRKS
      Quirks mode: Writes any character into data stream incl. U+0000.
    • XML_1_0

      public static int XML_1_0
      XML 1.0 mode: Writes characters according XML 1.0 specification, throws StreamException for invalid characters.
    • XML_1_1

      public static int XML_1_1
      XML 1.1 mode: Writes characters according XML 1.1 specification, throws StreamException for invalid characters.
    • XML_1_0_REPLACEMENT

      public static int XML_1_0_REPLACEMENT
      XML 1.0 mode: Writes characters according XML 1.0 specification, writes character U+FFFFD as replacement for invalid ones.
      Since:
      1.4.21
    • XML_1_1_REPLACEMENT

      public static int XML_1_1_REPLACEMENT
      XML 1.1 mode: Writes characters according XML 1.1 specification, writes character U+FFFFD as replacement for invalid ones.
      Since:
      1.4.21
    • 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
    • REPLACEMENT

      private static final char[] REPLACEMENT
  • 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