J. Rutkowski
J. Rutkowski

Reputation: 61

XML white space formatting in Java

I've got problem with formatting white space in Java. I add new attribute to my file, but it hasn't correct format.

    Attr attr = doc.createAttribute("name");
    attr.setValue("name");
    element.setAttributeNode(attr);
    element.setTextContent("Something=" + this.thumbnailCacheSize);

    NodeList items = doc.getElementsByTagName("mbean");
    Node e = items.item(0);
    e.appendChild(element);
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT,"yes");
    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(filepath);

    transformer.transform(source,result);

It should look like this:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <server>
   <mbean code="code" name="name">
     <attribute name="name3">Something3=500</attribute>
     <attribute name="name2">Something2=500</attribute>
     <attribute name="name1">Something1=500</attribute>
     <attribute name="name">Something=500</attribute>
   </mbean>
 </server>

But is like:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <server>
 <mbean code="code" name="name">
     <attribute name="name3">Something3=500</attribute>
     <attribute name="name2">Something2=500</attribute>
     <attribute name="name1">Something1=500</attribute>
   <attribute name="name">Something=500</attribute>
 </mbean>
 </server>

When I used: transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

I get:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <server>
 <mbean code="code" name="name">
     <attribute name="name3">Something3=500</attribute>
     <attribute name="name2">Something2=500</attribute>
     <attribute name="name1">Something1=500</attribute>
   <attribute name="name">Something=500</attribute>
     </mbean>
 </server>

Upvotes: 1

Views: 1102

Answers (1)

Ethan Choi
Ethan Choi

Reputation: 2399

Try this.

Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // enable indent
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); // 4 is indent space (default is zero)

Upvotes: 1

Related Questions