Java DOM API
No need of any external dependencies to run the below code.
public String formatXML(String input)
{
try
{
final InputSource src = new InputSource(new StringReader(input));
final Node document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(src).getDocumentElement();
final DOMImplementationRegistry registry = DOMImplementationRegistry
.newInstance();
final DOMImplementationLS impl = (DOMImplementationLS) registry
.getDOMImplementation("LS");
final LSSerializer writer = impl.createLSSerializer();
writer.getDomConfig().setParameter("format-pretty-print",
Boolean.TRUE);
writer.getDomConfig().setParameter("xml-declaration", true);
return writer.writeToString(document);
} catch (Exception e)
{
e.printStackTrace();
return input;
}
}
Java XML Transformer
Same as first code. This code doesn't need any external dependencies.
public String formatXML(String input)
{
try
{
Transformer transformer = TransformerFactory.newInstance()
.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "3");
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(parseXml(input));
transformer.transform(source, result);
return result.getWriter().toString();
} catch (Exception e)
{
e.printStackTrace();
return input;
}
}
private Document parseXml(String in)
{
try
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(in));
return db.parse(is);
} catch (Exception e)
{
throw new RuntimeException(e);
}
}
Using Apache xerces impl
The below code needs an external dependency xerces-impl. Add the following dependency in maven.
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.8.0</version>
</dependency>
public String formatXML(String input)
{
try
{
final Document document = parseXml(input);
OutputFormat format = new OutputFormat(document);
format.setLineWidth(65);
format.setIndenting(true);
format.setIndent(3);
Writer out = new StringWriter();
XMLSerializer serializer = new XMLSerializer(out, format);
serializer.serialize(document);
return out.toString();
} catch (Exception e)
{
e.printStackTrace();
return input;
}
}
private Document parseXml(String in)
{
try
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(in));
return db.parse(is);
} catch (Exception e)
{
throw new RuntimeException(e);
}
}
Using dom4j API
The below code needs dom4j dependency. Add the following dependency in maven.
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
public String formatXML(String input)
{
try
{
Document doc = DocumentHelper.parseText(input);
StringWriter sw = new StringWriter();
OutputFormat format = OutputFormat.createPrettyPrint();
format.setIndent(true);
format.setIndentSize(3);
XMLWriter xw = new XMLWriter(sw, format);
xw.write(doc);
return sw.toString();
}
catch(Exception e)
{
e.printStackTrace();
return input;
}
}
No comments:
Post a Comment