Есть ли более элегантный способ преобразования XML-документа в строку в Java, чем этот код? - PullRequest
65 голосов
/ 25 ноября 2008

Вот код, используемый в настоящее время.

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 ]

80 голосов
/ 25 ноября 2008

Полагается на DOM Level3 Загрузить / Сохранить :

public String getStringFromDoc(org.w3c.dom.Document doc)    {
    DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
    LSSerializer lsSerializer = domImplementation.createLSSerializer();
    return lsSerializer.writeToString(doc);   
}
13 голосов
/ 25 ноября 2008

Это немного более кратко:

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());
12 голосов
/ 25 ноября 2008

API-интерфейс преобразователя - это единственный XML-стандартный способ преобразования объекта DOM в сериализованную форму (в данном случае String). В качестве стандарта я имею в виду SUN Java XML API для обработки XML .

Другие альтернативы, такие как Xerces XMLSerializer или JDOM XMLOutputter , являются более прямыми методами (меньше кода), но они зависят от инфраструктуры.

На мой взгляд, способ, которым вы пользовались, самый элегантный и самый портативный из всех. Используя стандартный XML Java API, вы можете подключить XML-Parser или XML-Transformer по вашему выбору без изменения кода (так же, как драйверы JDBC). Есть ли что-нибудь более элегантное, чем это?

8 голосов
/ 25 ноября 2008

Вы можете использовать XOM , чтобы возможно сделать это:

org.w3c.dom.Document domDocument = ...;
nu.xom.Document xomDocument = 
    nu.xom.converters.DOMConverter.convert(domDocument);
String xml = xomDocument.toXML();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...