The easy way to do this is using a third party library. JDOM has classes XMLOutputter and Format; the latter has static method getPrettyFormat() which returns a Format that adds proper indentation etc. XMLOutputter can output to any Writer, so that includes StringWriter.
A short piece of code:
An alternative is go the hard way:
- maintain the indentation yourself
- when you encounter an element start tag, increase the indentation
- when you encounter an element end tag, decrease the indentation
The latter technique has the advantage that your not limited to a DOM solution, where the entire document is stored in memory. You could also use it for a SAX or StAX solution where you only get the latest element / attributes / text.