2011-11-30 19 views
11

que tiene a su vez un org.w3c.dom.Document en un java.lang.String. He encontrado dos enfoques posibles, uno que usa org.w3c.dom.ls.LSSerializer y el otro que usa un javax.xml.transform.Transformer. Tengo muestras de cada uno a continuación.LSSerializer vs Transformador para la serialización XML para cuerdas

¿Alguien me puede decir qué método es el preferido?

public String docToStringUsingLSSerializer(org.w3c.dom.Document doc) { 
    DOMImplementationRegistry reg = DOMImplementationRegistry.newInstance(); 
    DOMImplementationLS impl = (DOMImplementationLS) reg.getDOMImplementation("LS"); 
    LSSerializer serializer = impl.createLSSerializer(); 
    return serializer.writeToString(doc); 
} 

public String docToStringUsingTransformer(org.w3c.dom.Document doc) { 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    StringWriter stw = new StringWriter(); 
    transformer.transform(new DOMSource(doc), new StreamResult(stw)); 
    return stw.toString(); 
} 
+0

has encontrado una respuesta, por casualidad, a estas alturas? Me he preguntado la misma pregunta yo mismo. – apines

+0

No recibí ninguna respuesta, y no pude encontrar ningún artículo que prefiriera una u otra. Sin embargo, casi todos los artículos y publicaciones que encontré en la serialización de String usan javax.xml.Transform, por lo que parece ser el enfoque preferido en general. A pesar de eso fui con org.w3c.dom.ls.LSSerializer, y no tengo ningún motivo sólido para darlo. Simplemente me gusta la sensación de "One Stop Shopping" que obtengo usando los paquetes org.w3c.dom. Hasta el momento no tengo nada negativo que informar usando este método. Así que creo que mi respuesta es "Ambos parecen estar bien". –

Respuesta

4

hay varios puntos a considerar:

  1. LSSerializer se considera generalmente más rápido que transformador.
  2. Sin embargo, depende en gran medida de la implementación. Un Transformer basado en SAX tendrá un buen rendimiento. Y hay diferentes implementadores (Xalan, Xerces, ...).
  3. Es muy fácil verificar cuál es mejor en su sistema. Diseña un caso de prueba simple con un XML complejo. Ejecútelo en un ciclo de miles de veces, envuélvalo con verificación de tiempo (Syste.getCurrentMilliseconds o algo así) y obtendrá una respuesta.
  4. Otras respuestas agradables incluyen:
+0

Gracias por su respuesta iluminadora. Otro tema que me preocupa es lo que llamo "Probabilidad de abandono", la probabilidad de que un creador de una biblioteca o API la abandone, ya no ofrece actualizaciones a medida que cambia la tecnología subyacente (en este caso, el JDK). ¿Cree que tiene una mayor probabilidad de ser abandonado o desaprobado? Gracias –