objeto - ¿Hay una forma más elegante de convertir un documento XML en una cadena en Java que este código?
parsear xml a objeto java (4)
Aquí está el código usado actualmente.
public String getStringFromDoc(org.w3c.dom.Document doc) {
try
{
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
writer.flush();
return writer.toString();
}
catch(TransformerException ex)
{
ex.printStackTrace();
return null;
}
}
El transformador API es la única forma estándar de XML para transformar de un objeto DOM a un formulario serializado (String en este caso). Como estándar me refiero a SUN Java XML API para procesamiento XML .
Otras alternativas como Xerces XMLSerializer o JDOM XMLOutputter son métodos más directos (menos código) pero son específicos del framework.
En mi opinión, la forma en que la usaste es la más elegante y la más portátil de todas. Al usar una API XML Java estándar, puede conectar el XML-Parser o XML-Transformer de su elección sin cambiar el código (lo mismo que los controladores JDBC). ¿Hay algo más elegante que eso?
Esto es un poco más conciso:
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;
}
De lo contrario, podría utilizar una biblioteca como XMLSerializer de 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());
Puede usar XOM para quizás hacer esto:
org.w3c.dom.Document domDocument = ...;
nu.xom.Document xomDocument =
nu.xom.converters.DOMConverter.convert(domDocument);
String xml = xomDocument.toXML();
Se basa en 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);
}