package com.elvishew.xlog.formatter.message.xml; import com.elvishew.xlog.formatter.FormatException; import com.elvishew.xlog.internal.SystemCompat; import java.io.StringReader; import java.io.StringWriter; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.apache.commons.lang3.BooleanUtils; public class DefaultXmlFormatter implements XmlFormatter { private static final int XML_INDENT = 4; public String format(String str) { if (str == null || str.trim().length() == 0) { throw new FormatException("XML empty."); } try { StreamSource streamSource = new StreamSource(new StringReader(str)); StreamResult streamResult = new StreamResult(new StringWriter()); Transformer newTransformer = TransformerFactory.newInstance().newTransformer(); newTransformer.setOutputProperty("indent", BooleanUtils.YES); newTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", String.valueOf(4)); newTransformer.transform(streamSource, streamResult); String obj = streamResult.getWriter().toString(); return obj.replaceFirst(">", ">" + SystemCompat.lineSeparator); } catch (Exception e) { throw new FormatException("Parse XML error. XML string:" + str, e); } } }