Вот код, который используется в настоящее время.
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;
}
}




API-интерфейс преобразователя является единственным стандартным для XML способом преобразования объекта DOM в сериализованную форму (в данном случае String). Стандартно я имею в виду SUN Java XML API для обработки XML.
Другие альтернативы, такие как Xerces XMLSerializer или JDOM XMLOutputter, являются более прямыми методами (меньше кода), но они зависят от платформы.
На мой взгляд, способ, который вы использовали, самый элегантный и самый портативный из всех. Используя стандартный XML Java API, вы можете подключить XML-Parser или XML-Transformer по вашему выбору без изменения кода (так же, как драйверы JDBC). Есть ли что-нибудь более элегантное, чем это?
Это немного короче:
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;
}
В противном случае вы можете использовать такую библиотеку, как XMLSerializer от 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());
Вы можете использовать XOM, чтобы, возможно, сделать это:
org.w3c.dom.Document domDocument = ...;
nu.xom.Document xomDocument =
nu.xom.converters.DOMConverter.convert(domDocument);
String xml = xomDocument.toXML();
+1, XOM (и другие подобные библиотеки) действительно могут упростить дело.
Полагается на DOM Level3 Загрузить / сохранить:
public String getStringFromDoc(org.w3c.dom.Document doc) {
DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
return lsSerializer.writeToString(doc);
}
Предоставляет ли Java 7 другую альтернативу?
import import org.w3c.dom.ls.DOMImplementationLS; import org.w3c.dom.ls.LSSerializer;
Мне нравится второй вариант. С JRE 1.8.0
XMLSerializerдаже является частьюrt.jar