Here is the code currently used.
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;
}
}
-
The transformer API is the only XML-standard way to transform from a DOM object to a serialized form (String in this case). As standard I mean SUN Java XML API for XML Processing.
Other alternatives such as Xerces XMLSerializer or JDOM XMLOutputter are more direct methods (less code) but they are framework-specific.
In my opinion the way you have used is the most elegant and most portable of all. By using a standard XML Java API you can plug the XML-Parser or XML-Transformer of your choice without changing the code(the same as JDBC drivers). Is there anything more elegant than that?
-
This is a little more concise:
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; }
Otherwise you could use a library like XMLSerializer from 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());
-
You could use XOM to perhaps do this:
org.w3c.dom.Document domDocument = ...; nu.xom.Document xomDocument = nu.xom.converters.DOMConverter.convert(domDocument); String xml = xomDocument.toXML();
Jonik : +1, XOM (and other similar libraries) can really simplify matters. -
Relies on 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); }
-
This is an old question, but still relevent:
Using the questioner's method (which is the most commonly cited), on my box I got a 35-45ms conversion time.
By contrast, the LSSerializer and Apache XMLSerializer converted the same XML in 5-15ms
0 comments:
Post a Comment