2012-06-30 14 views
9

tôi sử dụng mã này để kích hoạt dòng mới:Cách buộc java xml dom tạo dòng mới sau <? Xml version = "1.0" encoding = "UTF-8"?>?

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 

Nhưng tôi nhận được sau đầu ra:

<?xml version="1.0" encoding="UTF-8"?><root> 
    <child>aaaa</child> 
</root> 

Tôi muốn có newline trước phần tử gốc. Tôi nên làm gì?

+1

Có lẽ khó khăn ... và điều này đặt ra câu hỏi "Tại sao?". Tôi hy vọng bạn không làm điều gì đó thấp hèn hạ lưu ... như "phân tích cú pháp" XML bằng cách sử dụng các regex. –

+0

XML vẫn hợp lệ. Lệnh xmllint có thể định dạng tệp cho bạn: "xmllint -format? .xml" –

Trả lời

3

Hãy thử

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 
transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","2"); 
+0

Nó không hoạt động đối với tôi. Sau khi đặt 'doc.appendChild (doc.createProcessingInstruction (" xml-stylesheet "," type = \ "text/xsl \" href = \ "myStylesheet.xsl \" "));' trước khi tạo root, không có ngắt dòng trước ' 'và giải pháp này không hoạt động. – Emadpres

0

Bạn có thể tự thêm dòng mới bằng cách gói Writer trong FilterWriter (hoặc OutputStream trong mã FilterOutputStream) được mã hóa để nhận ra phần cuối của thẻ đó và thêm dòng mới, khi đang thoát.

Nhưng đó là một chút ngớ ngẩn. Như Stephen C đã nói trong bình luận của anh ta, bạn thực sự có lẽ không nên quan tâm đến việc này đủ để làm phiền.

-1

bạn có thể chèn dòng mới theo cách thủ công. Gán chuỗi cho một biến tạm thời (giả sử chuỗi tạm của nó). Sau đó làm somehting như thế này

String filteredStr = new StringBuilder(temp).insert(temp.indexOf('>') + 1, "\n") 
        .toString(); 
1

Một giải pháp khác là: transformer.setOutputProperty (OutputKeys.INDENT, "yes"); transformer.setOutputProperty (OutputKeys.DOCTYPE_PUBLIC, "có"); transformer.setOutputProperty ("{http://xml.apache.org/xslt} số tiền thụt lề", "10");

Các vấn đề liên quan