2013-09-07 59 views
6

Thuộc tính nào được sử dụng để thay đổi bộ tách dòng Marshaller (javax.xml.bind.Marshaller) (chuyển dòng, dòng mới, ngắt dòng)?Làm cách nào để thay đổi bộ tách dòng JAXB Marshaller?

Tôi tin rằng trình khắc phục sự cố đang sử dụng dấu tách dòng của hệ thống.

System.getProperty("line.separator") 

Tuy nhiên một dãy thoát khác nhau là cần thiết (ví dụ: \r\n cần phải được thay đổi để \n hoặc ngược lại).

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

marshaller.setProperty("line.separator", "\r\n"); 

Trả lời

6

Không có thuộc tính nào bạn có thể tùy chỉnh. Hầu hết implementations gửi trực tiếp đến bộ đệm dòng separator:

write('\n'); 

Tuy nhiên, bạn có thể thay thế kết quả.

Marshaller marshaller = ctx.createMarshaller(); 
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); 

StringWriter writer = new StringWriter(1024); // 2 KB 
marshaller.marshal(obj, writer); 

String str = writer.toString(); 
str = str.replace("\n", "\r\n"); 

Để tránh bất kỳ ảnh hưởng đến hiệu suất, bạn phải thiết lập kích thước gần đúng (ví dụ 1024 -> 2 KB) trong constructor cho java.io.StringWriter.

+2

Điều này có nguy hiểm không? Nếu việc thực hiện thay đổi, thì điều này sẽ tạo ra "\ r \ n \ n". –

+0

Hmm ... Bạn đã đúng! Trong trường hợp tha, 'str = str.replaceAll (" \ r? \ N "," \ r \ n ");' –