2015-08-02 3 views
1

Я использую Transformer для префикса и вставки отступа в XML, который изначально является одной большой линией. Вот мой код:Чтение результата трансформатора по строке (Java)

BufferedWriter br = null; 
Source xmlInput = new StreamSource(inputSR); 
StringWriter stringWriter = new StringWriter(); 
StreamResult xmlOutput = new StreamResult(stringWriter); 
TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
transformerFactory.setAttribute("indent-number", 2); 
Transformer transformer = transformerFactory.newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.transform(xmlInput, xmlOutput); 

Как я могу написать xmlOutput в файл, построчно (без загрузки всей строки в памяти)?

ответ

0

Вместо StringWriter используйте FileOutputStream:

StreamResult xmlOutput = new StreamResult(new FileOutputStream("output.xml")) 

Это будет записывать постепенно в файл. Он не обязательно будет писать строки за строкой (строки не имеют большого значения в XML), но я не понимаю, зачем вам это нужно.

+0

Целью было изменение некоторых тегов перед записью на диск. – Nati

+1

Возможно, вам лучше использовать SAXResult. Затем дерево результатов будет отправлено по событию в ваш ContentHandler. Если вы хотите изменить поток результатов после сериализации, вы можете реализовать Writer и перехватить вызовы write(), но вам нужно будет сделать свою собственную буферизацию, чтобы избежать текста, который вы ищете, охватывая несколько вызовов для таких методов, как записывать(). –

Смежные вопросы