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