LSSerializer vs Transformer для сериализации XML в строку - PullRequest
12 голосов
/ 30 ноября 2011

Мне нужно превратить документ 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 Ответ

4 голосов
/ 30 января 2012

Есть несколько моментов, которые необходимо учитывать:

  1. LSSerializer обычно считается быстрее, чем Трансформатор .
  2. Тем не менее, это сильно зависит отреализация.A Transformer на базе SAX будет иметь хорошую производительность.И есть разные разработчики (Xalan, Xerces, ...).
  3. Очень легко проверить, что лучше в вашей системе.Разработайте простой контрольный пример со сложным XML.Запустите его в цикле тысячи раз, оберните его проверкой времени (Syste.getCurrentMilliseconds или что-то еще), и вы получите ответ самостоятельно.
  4. Другие приятные ответы включают в себя:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...