LSSerializer vs Transformer для сериализации xml в String
Мне нужно превратить org.w3c.dom.Document в java.lang.String. Я нашел два возможных подхода, один из которых использует org.w3c.dom.ls.LSSerializer, а другой - с помощью javax.xml.transform.Transformer. У меня есть образцы каждого из них ниже.
Может ли кто-нибудь сказать мне, какой метод будет предпочтительнее?
public String docToStringUsingLSSerializer(org.w3c.dom.Document doc) {
DOMImplementationRegistry reg = DOMImplementationRegistry.newInstance();
DOMImplementationLS impl = (DOMImplementationLS) reg.getDOMImplementation("LS");
LSSerializer serializer = impl.createLSSerializer();
return serializer.writeToString(doc);
}
public String docToStringUsingTransformer(org.w3c.dom.Document doc) {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter stw = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(stw));
return stw.toString();
}
Ответы
Ответ 1
Можно рассмотреть несколько моментов:
- LSSerializer обычно считается быстрее, чем Transformer.
- Тем не менее это сильно зависит от реализации. Трансформатор на основе SAX будет иметь хорошую производительность. И есть разные исполнители (Xalan, Xerces,...).
- Очень легко проверить, что лучше в вашей системе. Создайте простой тестовый пример со сложным XML. Запустите его за цикл за тридцать секунд, оберните это с помощью проверки времени (Syste.getCurrentMilliseconds или что-то еще), и у вас есть ответ.
- Другие приятные ответы: