71 votes

Existe-t-il un moyen plus élégant de convertir un document XML en chaîne en Java que ce code?

Voici le code actuellement utilisé.

87voto

ykaganovich Points 8497

S'appuie sur DOM Level3 Load / Save :

 public String getStringFromDoc(org.w3c.dom.Document doc)    {
    DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
    LSSerializer lsSerializer = domImplementation.createLSSerializer();
    return lsSerializer.writeToString(doc);   
}
 

14voto

Fernando Miguélez Points 7532

Le transformateur de l'API est la seule XML standard de la manière de transformer à partir d'un objet DOM à une forme sérialisée (String dans ce cas). En standard, je veux dire SUN Java XML API for XML Processing.

D'autres solutions, telles que Xerces XMLSerializer ou JDOM XMLOutputter sont des méthodes plus directes (moins de code), mais ils sont un cadre spécifique.

À mon avis, la façon dont vous avez utilisé est le plus élégant et le plus portable de tous. En utilisant un standard XML Java API, vous pouvez brancher le XML-Parser XML ou-Transformateur de votre choix sans changer le code(le même que les pilotes JDBC). Est-il rien de plus élégant que cela?

14voto

digitalsanctum Points 1937

C'est un peu plus concis:

 try {
  Transformer transformer = TransformerFactory.newInstance().newTransformer();
  StreamResult result = new StreamResult(new StringWriter());
  DOMSource source = new DOMSource(doc);
  transformer.transform(source, result);
  return result.getWriter().toString();
} catch(TransformerException ex) {
  ex.printStackTrace();
  return null;
}
 

Sinon, vous pouvez utiliser une bibliothèque comme XMLSerializer d'Apache:

   //Serialize DOM
  OutputFormat format    = new OutputFormat (doc); 
  // as a String
  StringWriter stringOut = new StringWriter ();    
  XMLSerializer serial   = new XMLSerializer (stringOut, 
                                              format);
  serial.serialize(doc);
  // Display the XML
  System.out.println(stringOut.toString());
 

9voto

toolkit Points 27248

Vous pouvez utiliser XOM pour peut-être faire ceci:

 org.w3c.dom.Document domDocument = ...;
nu.xom.Document xomDocument = 
    nu.xom.converters.DOMConverter.convert(domDocument);
String xml = xomDocument.toXML();
 

5voto

Joe K Points 31

C'est une vieille question, mais toujours pertinente:

En utilisant la méthode de l'interrogateur (qui est la plus souvent citée), sur ma boîte, j'ai eu un temps de conversion de 35 à 45 ms.

En revanche, LSSerializer et Apache XMLSerializer ont converti le même XML en 5-15 ms.

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