Document XML en chaîne


104

Quel est le moyen le plus simple d'obtenir la représentation String d'un document XML ( org.w3c.dom.Document)? C'est-à-dire que tous les nœuds seront sur une seule ligne.

À titre d'exemple, de

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

(ce n'est qu'une représentation arborescente, dans mon code c'est un org.w3c.dom.Documentobjet, donc je ne peux pas le traiter comme une chaîne)

à

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

Merci!



Réponses:


207

En supposant que docvotre instance de 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
ce replaceAlln'est probablement pas nécessaire si vous ajoutez une autre propriété de sortie:transformer.setOutputProperty(OutputKeys.INDENT, "no");
bvdb

10
and the writer.getBuffer().toString()can just bewriter.toString()
bvdb

@bvdb deux excellents points. Il y a un avantage supplémentaire à ajouter explicitement la OutputKeys.INDENTligne, car vous pouvez également la définir "yes"pour conserver l'espace blanc - si c'est ce que vous voulez (dans ma situation, j'ai trouvé que la simple suppression replaceAllne fonctionnait pas pour inclure l'espace blanc dans le chaîne).
Jonathan Benn

Voir aussi stackoverflow.com/questions/1384802/… pour une explication sur la façon de faire fonctionner correctement le retrait
Jonathan Benn

2

Utiliser le XMLSerializer Apache

voici un exemple: http://www.informit.com/articles/article.asp?p=31349&seqNum=3&rl=1

vous pouvez vérifier cela aussi

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


Xerces ne distribue toujours pas officiellement via Maven (donc groovy aussi), y compris aucune source fiable ou JavaDocs, WTF! Aucun support officiel de maven ne rend la résolution de la dépréciation plus difficile, rend les mises à jour cohérentes plus compliquées et pose des risques pour la sécurité, il est donc stupide d'avoir des dépendances dessus maintenant!
Infernoz

1

Vous devez d'abord vous débarrasser de tous les caractères de nouvelle ligne dans tous vos nœuds de texte. Ensuite, vous pouvez utiliser une transformation d'identité pour générer votre arborescence DOM. Regardez le javadoc pour TransformerFactory#newTransformer().

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.