Tài liệu XML thành chuỗi


104

Cách đơn giản nhất để có được biểu diễn chuỗi của Tài liệu XML ( org.w3c.dom.Document) là gì? Đó là tất cả các nút sẽ nằm trên một dòng duy nhất.

Ví dụ, từ

<root>
  <a>trge</a>
  <b>156</b>
</root>

(đây chỉ là biểu diễn dạng cây, trong mã của tôi, nó là một org.w3c.dom.Documentđối tượng, vì vậy tôi không thể coi nó như một chuỗi)

đến

"<root> <a>trge</a> <b>156</b> </root>"

Cảm ơn!



Câu trả lời:


207

Giả sử doclà trường hợp của bạn về org.w3c.dom.Document:

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
String output = writer.getBuffer().toString().replaceAll("\n|\r", "");

12
các replaceAll có lẽ là không cần thiết nếu bạn thêm tài sản đầu ra khác:transformer.setOutputProperty(OutputKeys.INDENT, "no");
bvdb

10
writer.getBuffer().toString()chỉ có thể làwriter.toString()
bvdb

@bvdb cả hai điểm xuất sắc. Có một lợi thế bổ sung để thêm OutputKeys.INDENTdòng một cách rõ ràng , bởi vì sau đó bạn cũng có thể đặt nó để "yes"giữ khoảng trắng - nếu đó là những gì bạn muốn (trong tình huống của tôi, tôi thấy rằng chỉ xóa replaceAllkhông hoạt động để bao gồm khoảng trắng trong chuỗi).
Jonathan Benn

Xem thêm stackoverflow.com/questions/1384802/… để biết giải thích về cách làm cho thụt lề hoạt động bình thường
Jonathan Benn


1

Trước tiên, bạn cần loại bỏ tất cả các ký tự dòng mới trong tất cả các nút văn bản của mình. Sau đó, bạn có thể sử dụng một biến đổi danh tính để xuất ra cây DOM của mình. Nhìn vào javadoc cho TransformerFactory#newTransformer().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.