XML file formatting: indentation

I am trying to write an XML file with the correct indentation. Here is my code:

public class WebVideo { private final String C_XMLFILEPATH = "resources/video.xml"; private String itemId; private String videoPath; public WebVideo(long itemId, String videoPath) { this.itemId = Long.toString(itemId); this.videoPath = videoPath; } public void saveVideo() throws ParserConfigurationException, IOException, TransformerFactoryConfigurationError, TransformerException, SAXException { File xmlFile = new File(C_XMLFILEPATH); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory .newDocumentBuilder(); Document document = null; Element rootElement = null; if (xmlFile.exists()) { document = documentBuilder.parse(xmlFile); rootElement = document.getDocumentElement(); } else { document = documentBuilder.newDocument(); rootElement = document.createElement("Videos"); document.appendChild(rootElement); } Element itemElement = document.createElement("Video"); rootElement.appendChild(itemElement); Element idElement = document.createElement("Id"); Text id = document.createTextNode(itemId); idElement.appendChild(id); itemElement.appendChild(idElement); Element pathElement = document.createElement("Path"); Text path = document.createTextNode(videoPath); pathElement.appendChild(path); itemElement.appendChild(pathElement); Transformer transformer = TransformerFactory.newInstance() .newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "4"); StreamResult streamResult = new StreamResult(new StringWriter()); DOMSource domSource = new DOMSource(document); transformer.transform(domSource, streamResult); String xmlString = streamResult.getWriter().toString(); BufferedWriter bufferedWriter = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(xmlFile))); bufferedWriter.write(xmlString); bufferedWriter.flush(); bufferedWriter.close(); } } 

Everything is fine, but if you carefully look at the XML output file, there is a problem when I add a new element. The output XML file is here:

  <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Videos> <Video> <Id>1</Id> <Path>path</Path> </Video> <Video> <Id>2</Id> <Path>path</Path> </Video> </Videos> 

The tag is in the same indent with the tag. How can I solve this problem? Thanks.

+4
source share
4 answers

Mark this answer for a fairly printable XML publication: How do I pretty print XML with Java?

+2
source

You can also create your own linebreak format if you want more settings. Add linebreak text before adding the actual child:

 Text lineBreak = doc.createTextNode("\n\t"); element.appendChild(lineBreak); 
+2
source

Some XML libraries have a built-in print function. For example, dom4j has OutputFormat.createPrettyPrint() - see the manual on how to use it in http://dom4j.sourceforge.net/dom4j-1.6.1/guide.html#Writing_a_document_to_a_file

+1
source
 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; } } 
0
source

Source: https://habr.com/ru/post/1337773/


All Articles