110 votes

Document XML vers chaîne de caractères

Quel est le moyen le plus simple d'obtenir la représentation sous forme de chaîne 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 une org.w3c.dom.Document donc je ne peux pas le traiter comme un String)

à

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

Gracias.

0 votes

0 votes

217voto

WhiteFang34 Points 28652

En supposant que doc est votre 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 votes

Le site replaceAll n'est probablement pas nécessaire si vous ajoutez une autre propriété de sortie : transformer.setOutputProperty(OutputKeys.INDENT, "no");

10 votes

Et le writer.getBuffer().toString() peut juste être writer.toString()

0 votes

@bvdb deux excellents points. Il y a un avantage supplémentaire à ajouter explicitement l'option OutputKeys.INDENT parce qu'alors, vous pouvez également le définir comme suit "yes" pour garder l'espace blanc - si c'est ce que vous voulez (dans ma situation, j'ai trouvé que le simple fait de supprimer replaceAll n'a pas fonctionné pour inclure les espaces dans la chaîne).

2voto

GuruKulki Points 7974

Utiliser le XMLSerializer d'Apache

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

vous pouvez également vérifier ceci

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

0 votes

Xerces n'est toujours, ridiculement, pas distribué officiellement via Maven (donc groovy aussi), y compris pas de source fiable ou de JavaDocs, WTF ! L'absence de support officiel de Maven rend la résolution de la dépréciation plus difficile, rend les mises à jour cohérentes plus compliquées, et pose des risques de sécurité, il est donc stupide d'avoir des dépendances sur lui maintenant !

1voto

forty-two Points 7318

Tout d'abord, vous devez 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 sortir votre arbre DOM. Regardez la javadoc pour TransformerFactory#newTransformer() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X