2009-06-30 8 views
3

J'ai une instance org.w3c.dom.Document que j'ai besoin de convertir en une chaîne XML. Je sais comment faire cela en Java (en utilisant les facilités javax.xml.transform), mais je me demandais s'il y avait une façon plus "groovy" de le faire?org.w3c.dom.Document en chaîne XML à l'aide de Groovy

J'ai essayé d'utiliser la classe DomToGroovy, qui crée avec succès une version de script groovy du document DOM. Mais je ne suis pas sûr de savoir comment je l'utiliserais pour générer une chaîne XML. Je pourrais aboyer le mauvais arbre ...

Toute aide serait grandement appréciée!

Répondre

3

mais je me demandais s'il y avait une façon plus «groovy» de le faire?

Il est sûr: la classe groovy.xml.XmlUtil

Je ne sais pas quelle était la version de Groovy quand cette classe a été ajouté, mais je suppose que ce fut une première version.

Édition: classe groovy.xml.XmlUtil exists since version 1.6.0; Dans la version 1.5.x, il s'appelait groovy.xml.dom.DOMUtil. Dans les deux versions, cette classe ne fait rien de trop groovy; Si vous regardez its source, vous verrez que c'est juste un emballage autour de java.xml.transform. Cependant, j'apprécie vraiment que le Groovy GDK fournisse un moyen simple de faire une telle opération commune (écrire du xml dans une chaîne de caractères), alors que le JDK Java échoue.

Exemple:

import javax.xml.parsers.DocumentBuilderFactory 
import groovy.xml.XmlUtil 

def fileName = 'build.xml' 

def builder  = DocumentBuilderFactory.newInstance().newDocumentBuilder() 
def inputStream = new FileInputStream(fileName) 
def doc   = builder.parse(inputStream) 

println XmlUtil.serialize(doc.documentElement) 

Toujours regarder la Groovy API et Groovy extensions to the JDK avant de lancer votre propre solution (une leçon que j'appris à la dure)

+0

I pense qu'il a été ajouté dans Groovy 1.6. Ce n'est pas dans le Groovy 1.5 qui vient avec NetBeans 6.5 – Patrick

1

Il est très groovy maintenant

> def doc = groovy.xml.DOMBuilder.newInstance().parseText("<foo count='42'><bar/><foo>") 
> doc.documentElement as String 
<foo count="42"> 
    <bar/> 
</foo> 
Questions connexes