Dokumen XML ke String


104

Apa cara termudah untuk mendapatkan representasi String dari XML Document ( org.w3c.dom.Document)? Artinya semua node akan berada dalam satu baris.

Sebagai contoh, dari

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

(ini hanya representasi pohon, dalam kode saya itu adalah org.w3c.dom.Documentobjek, jadi saya tidak bisa memperlakukannya sebagai String)

untuk

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

Terima kasih!



Jawaban:


207

Dengan asumsi docadalah contoh Anda dari 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
yang replaceAllmungkin tidak diperlukan jika Anda menambahkan properti output yang lain:transformer.setOutputProperty(OutputKeys.INDENT, "no");
bvdb

10
dan writer.getBuffer().toString()hanya bisawriter.toString()
bvdb

@bvdb kedua poin yang sangat baik. Ada keuntungan ekstra untuk menambahkan OutputKeys.INDENTbaris secara eksplisit , karena Anda juga dapat mengaturnya "yes"untuk mempertahankan spasi - jika itu yang Anda inginkan (dalam situasi saya, saya telah menemukan bahwa hanya menghapus replaceAlltidak berhasil untuk menyertakan spasi di tali).
Jonathan Benn

Lihat juga stackoverflow.com/questions/1384802/… untuk penjelasan tentang cara membuat indentasi berfungsi dengan benar
Jonathan Benn

2

Gunakan Apache XMLSerializer

inilah contohnya: http://www.informit.com/articles/article.asp?p=31349&seqNum=3&rl=1

Anda bisa memeriksanya juga

http://www.netomatix.com/XmlFileToString.aspx


Xerces masih, konyolnya, tidak secara resmi mendistribusikan melalui Maven (jadi asyik juga), termasuk tidak ada sumber terpercaya atau JavaDocs, WTF! Tidak ada dukungan resmi maven yang mempersulit penyelesaian penghentian, membuat pembaruan yang konsisten lebih merepotkan, dan menimbulkan risiko keamanan, jadi bodoh jika memiliki ketergantungan padanya sekarang!
Infernoz

1

Pertama, Anda perlu menyingkirkan semua karakter baris baru di semua node teks Anda. Kemudian Anda dapat menggunakan transformasi identitas untuk mengeluarkan pohon DOM Anda. Lihat javadoc untuk TransformerFactory#newTransformer().

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.