Dizeye XML Belgesi


104

Bir XML Belgesinin ( org.w3c.dom.Document) Dize temsilini almanın en basit yolu nedir ? Yani tüm düğümler tek bir hatta olacak.

Örnek olarak

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

(bu sadece bir ağaç temsili, benim kodumda bir org.w3c.dom.Documentnesne, bu yüzden onu String olarak ele alamıyorum)

-e

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

Teşekkürler!



Yanıtlar:


207

Varsayalım docki 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
replaceAllBaşka bir çıkış özelliği eklerseniz muhtemelen gerekli değildir:transformer.setOutputProperty(OutputKeys.INDENT, "no");
bvdb

10
ve writer.getBuffer().toString()sadece olabilirwriter.toString()
bvdb

@bvdb hem mükemmel puan. OutputKeys.INDENTSatırı açıkça eklemenin ekstra bir avantajı vardır , çünkü o zaman onu "yes"beyaz boşluğu korumak için de ayarlayabilirsiniz - eğer istediğiniz buysa (benim durumumda, sadece kaldırmanın replaceAllbeyaz boşluğu eklemek için işe yaramadığını gördüm . dize).
Jonathan Benn


2

Apache XMLSerializer'ı kullanın

işte bir örnek: http://www.informit.com/articles/article.asp?p=31349&seqNum=3&rl=1

bunu da kontrol edebilirsin

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


Xerces hala, gülünç bir şekilde, güvenilir bir kaynak veya JavaDocs, WTF dahil, Maven aracılığıyla resmi olarak dağıtım yapmıyor (bu nedenle de harika)! Hiçbir resmi maven desteği, kullanımdan kaldırma çözümünü zorlaştırmaz, tutarlı güncellemeleri daha zor hale getirir ve güvenlik riskleri ortaya çıkarır, bu nedenle şu anda herhangi bir bağımlılığın olması aptalca!
Infernoz

1

Öncelikle, tüm metin düğümlerinizdeki tüm yeni satır karakterlerinden kurtulmanız gerekir. Ardından, DOM ağacınızın çıktısını almak için bir kimlik dönüşümü kullanabilirsiniz. İçin javadoc'a bakın TransformerFactory#newTransformer().

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.