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 Detail

      • 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
      • 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 java.lang.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 Detail

      • PrettyPrintWriter

        private PrettyPrintWriter​(java.io.Writer writer,
                                  int mode,
                                  char[] lineIndenter,
                                  NameCoder nameCoder,
                                  java.lang.String newLine)
      • PrettyPrintWriter

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

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

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

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

        public PrettyPrintWriter​(java.io.Writer writer,
                                 char[] lineIndenter)
      • PrettyPrintWriter

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

        public PrettyPrintWriter​(java.io.Writer writer,
                                 int mode,
                                 java.lang.String lineIndenter)
        Since:
        1.3
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 java.lang.String lineIndenter)
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 int mode,
                                 NameCoder nameCoder)
        Since:
        1.4
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 NameCoder nameCoder)
        Since:
        1.4
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 int mode)
        Since:
        1.3
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer)
    • Method Detail

      • startNode

        public void startNode​(java.lang.String name)
      • setValue

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

        public void addAttribute​(java.lang.String key,
                                 java.lang.String value)
      • writeAttributeValue

        protected void writeAttributeValue​(QuickWriter writer,
                                           java.lang.String text)
      • writeText

        protected void writeText​(QuickWriter writer,
                                 java.lang.String text)
      • writeText

        private void writeText​(java.lang.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 java.lang.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