2012-12-18 40 views
8

我創建了一些將映射寫入XML的代碼。它似乎正在工作,但文件沒有新行打印。所以在任何XML編輯器中它只能在一行上。我怎樣才能讓它爲每個孩子打印一條新線?將XML僅打印到一行

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.newDocument(); 

Element vdata = doc.createElement("vouchdata"); 
doc.appendChild(vdata); 

for (Entry<String, String> entry : vouchMap.entrySet()) { 
    Element udata = doc.createElement("vouch"); 

    Attr vouchee = doc.createAttribute("name"); 
    vouchee.setValue(entry.getKey()); 
    udata.setAttributeNode(vouchee); 

    Attr voucher = doc.createAttribute("vouchedBy"); 
    voucher.setValue(entry.getValue()); 
    udata.setAttributeNode(voucher); 

    vdata.appendChild(udata); 
} 

// write the content into xml file 
TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
DOMSource source = new DOMSource(doc); 
StreamResult result = new StreamResult(new File("vouchdata.xml")); 

// Output to console for testing 
// StreamResult result = new StreamResult(System.out); 

transformer.transform(source, result); 
+3

見http://stackoverflow.com/questions/1264849/pretty-printing-output-from-javax-xml-transform -transformer-with-only-standard-j –

回答

19

我用

Transformer tf = TransformerFactory.newInstance().newTransformer(); 
tf.setOutputProperty(OutputKeys.INDENT, "yes"); 
tf.setOutputProperty(OutputKeys.METHOD, "xml"); 
tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); 

這似乎工作得很好。

+0

這對我有效。謝謝 – Tony

+0

@Tony這個小小的黑客讓我花了幾個星期去Google和試用和錯誤。很高興我把你救了出來;) – MadProgrammer