2013-06-24 49 views
5

我正在用Transformer通過添加更多節點來編輯Java中的XML文件。舊的XML代碼保持不變,但新的XML節點具有&lt;&gt;而不是<>,並且位於同一行。我如何獲得<>而不是&lt;&gt;以及如何在新節點之後獲得換行符。我已經閱讀了幾個類似的線程,但無法獲得正確的格式。這裏是代碼的相關部分:Java變壓器輸出<和>而不是<>

// Read the XML file 

DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc=db.parse(xmlFile.getAbsoluteFile()); 
Element root = doc.getDocumentElement(); 


// create a new node 
Element newNode = doc.createElement("Item"); 

// add it to the root node 
root.appendChild(newNode); 

// create a new attribute 
Attr attribute = doc.createAttribute("Name"); 

// assign the attribute a value 
attribute.setValue("Test..."); 

// add the attribute to the new node 
newNode.setAttributeNode(attribute); 



// transform the XML 
Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
StreamResult result = new StreamResult(new FileWriter(xmlFile.getAbsoluteFile())); 
DOMSource source = new DOMSource(doc); 
transformer.transform(source, result); 

感謝

+0

你能展示一個小樣本輸入和一個小樣本輸出嗎? – Woot4Moo

+0

在上面的代碼中沒有提及「<' or '>」。你如何注射他們? – fge

+0

給我們一個線索!向我們展示一些尖括號... –

回答

4

基於發佈here一個問題:

public void writeToOutputStream(Document fDoc, OutputStream out) throws Exception { 
    fDoc.setXmlStandalone(true); 
    DOMSource docSource = new DOMSource(fDoc); 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
    transformer.setOutputProperty(OutputKeys.INDENT, "no"); 
    transformer.transform(docSource, new StreamResult(out)); 
} 

生產:

<?xml version="1.0" encoding="UTF-8"?> 

我看到的差異:

fDoc.setXmlStandalone(true); 
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
1

嘗試通過InputStream而不是WriterStreamResult

StreamResult result = new StreamResult(new FileInputStream(xmlFile.getAbsoluteFile())); 

的變壓器documentation也暗示。

5

要更換& GT和其他標籤則可以使用org.apache.commons.lang3:

StringEscapeUtils.unescapeXml(resp.toString()); 

後,您可以使用變壓器的下列財產在你的XML有換行:

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
相關問題