這是一個小片段,試圖重置javax.xml.transform.Transformer
的輸出屬性。如何重置Transformer輸出屬性?
Transformer transformer = TransformerFactory.newInstance().newTransformer();
Properties originalOutputProperties = transformer.getOutputProperties();
System.out.println("ORIG= " + originalOutputProperties);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
System.out.println("BEFORE RESET= " + transformer.getOutputProperties());
transformer.setOutputProperties(originalOutputProperties);
System.out.println("AFTER RESET= " + transformer.getOutputProperties());
這是輸出中:
ORIG= {}
BEFORE RESET= {encoding=UTF-8}
AFTER RESET= {encoding=UTF-8}
正如你可以看到,原來的輸出性能不是原有的。
如何重置輸出屬性?
編輯
變壓器重複使用多次。 在這種情況下,這裏是我所期望的:
ORIG= {}
BEFORE RESET= {encoding=UTF-8}
AFTER RESET= {}
ORIG= {}
BEFORE RESET= {indent=yes, encoding=UTF-8, {http://xml.apache.org/xslt}indent-amount=4, omit-xml-declaration=yes}
AFTER RESET= {}
我無法解釋這種行爲,但我通常會建議爲每次轉換創建一個新的Transformer。如果重複使用相同的樣式表,重用Templates對象很重要,但是從Templates對象創建新的Transformer應該至少與重置現有的一樣便宜。 –
@MichaelKay我選擇每次創建新的Transformer。我可以容忍重複創作引入的任何「開銷」。 – Stephan