Есть ли более элегантный способ преобразования XML-документа в String в Java, чем этот код?
Вот код, который в настоящее время используется.
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;
}
}
Ответы
Ответ 1
Опирается на 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);
}
Ответ 2
Трансформатор API является единственным стандартом XML-стандарта для преобразования из объекта DOM в сериализованную форму (в данном случае String). В качестве стандарта я имею в виду SUN Java XML API для обработки XML.
Другие альтернативы, такие как Xerces XMLSerializer или JDOM XMLOutputter - более прямые методы (меньше кода), но они специфичны для конкретной структуры.
По-моему, способ, которым вы пользовались, самый элегантный и самый портативный. Используя стандартный XML Java API, вы можете подключить XML-Parser или XML-Transformer по вашему выбору без изменения кода (так же, как и JDBC-драйверы). Есть ли что-то более элегантное, чем это?
Ответ 3
Это немного более кратким:
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());
Ответ 4
Вы можете использовать XOM, чтобы сделать это:
org.w3c.dom.Document domDocument = ...;
nu.xom.Document xomDocument =
nu.xom.converters.DOMConverter.convert(domDocument);
String xml = xomDocument.toXML();