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