View Javadoc
1 package com.thoughtworks.xstream.xml.text; 2 3 import com.thoughtworks.xstream.xml.XMLWriter; 4 5 import java.io.PrintWriter; 6 import java.io.Writer; 7 import java.util.LinkedList; 8 9 public class PrettyPrintXMLWriter implements XMLWriter { 10 11 private PrintWriter writer; 12 private LinkedList elementStack = new LinkedList(); 13 private boolean tagInProgress; 14 private int depth; 15 private String lineIndenter; 16 private boolean readyForNewLine; 17 private boolean tagIsEmpty; 18 19 public PrettyPrintXMLWriter(PrintWriter writer, String lineIndenter) { 20 this.writer = writer; 21 this.lineIndenter = lineIndenter; 22 } 23 24 public PrettyPrintXMLWriter(Writer writer, String lineIndenter) { 25 this(new PrintWriter(writer), lineIndenter); 26 } 27 28 public PrettyPrintXMLWriter(PrintWriter writer) { 29 this(writer, " "); 30 } 31 32 public PrettyPrintXMLWriter(Writer writer) { 33 this(new PrintWriter(writer)); 34 } 35 36 public void startElement(String name) { 37 tagIsEmpty = false; 38 finishTag(); 39 write("<"); 40 write(name); 41 elementStack.addLast(name); 42 tagInProgress = true; 43 depth++; 44 readyForNewLine = true; 45 tagIsEmpty = true; 46 } 47 48 public void writeText(String text) { 49 readyForNewLine = false; 50 tagIsEmpty = false; 51 finishTag(); 52 text = text.replaceAll("&", "&"); 53 text = text.replaceAll("<", "<"); 54 text = text.replaceAll(">", ">"); 55 write(text); 56 } 57 58 public void addAttribute(String key, String value) { 59 write(" "); 60 write(key); 61 write("=\""); 62 write(value); 63 write("\""); 64 } 65 66 public void endElement() { 67 depth--; 68 if (tagIsEmpty) { 69 write("/"); 70 readyForNewLine = false; 71 finishTag(); 72 elementStack.removeLast(); 73 } else { 74 finishTag(); 75 write("</" + elementStack.removeLast() + ">"); 76 } 77 readyForNewLine = true; 78 } 79 80 private void write(String str) { 81 writer.write(str); 82 } 83 84 private void finishTag() { 85 if (tagInProgress) { 86 write(">"); 87 } 88 tagInProgress = false; 89 if (readyForNewLine) { 90 endOfLine(); 91 } 92 readyForNewLine = false; 93 tagIsEmpty = false; 94 } 95 96 protected void endOfLine() { 97 write("\n"); 98 for (int i = 0; i < depth; i++) { 99 write(lineIndenter); 100 } 101 } 102 }

This page was automatically generated by Maven