Производительность создания XML с использованием StringTemplate? - PullRequest
0 голосов
/ 09 июля 2010

Я разрабатываю приложение, которое использует различные компоненты для создания документа XHTML, я использовал StringTemplate для создания данных документа компонентов, а затем объединил их в один большой документ. Это пример компонента:

public class BoxImpl extends AbstractContainerImpl implements Box {

    private static final StringTemplate template;

    static {
        template = new StringTemplate(
        "<div id=$id$>$content$</div>");
    }

    public BoxImpl(String id) {
        this.setId(id);
    }

    @Override
    public CharBuffer generate() {
        // Get a local instance
        StringTemplate template = BoxImpl.template.getInstanceOf();
        // Set ID attribute of box
        template.setAttribute("id", this.getId());
        // Generate view for controls inside this container
        CharBuffer inner = this.generateInner();
        // Add inner data as content attribute
        template.setAttribute("content", inner == null ? "" : inner.array());
        // Return the result
        return CharBuffer.wrap(BoxImpl.template.toString());
    }

}

У меня вопрос: эффективнее ли реализовать этот вид построения документов с использованием XML DOM или StringBuilder по сравнению с StringTemplate?

РЕДАКТИРОВАТЬ: мне не нужна проверка XML.

1 Ответ

2 голосов
/ 09 июля 2010

С точки зрения производительности, я почти уверен, что DOM будет хуже, чем использование StringTemplate.Использование StringBuilder может быть немного быстрее и, возможно, даже более чистым (если используется неявно):

public CharBuffer generate() {
    String content = inner == null ? "" : inner.array();
    return CharBuffer.wrap( "<div id=\"" + this.getId() + "\">" + content + "</div>" );
}

Самый быстрый способ сделать это, вероятно, состоит в том, чтобы полностью избежать создания временных строк, т. Е. Напрямую записыватьa BufferedOutputWriter или PrintWriter.

Но в целом я бы предложил использовать один из выделенных API-интерфейсов Stream Writer для создания документов XML.Есть несколько неочевидных ловушек, когда вы помещаете ванильные строки непосредственно в XML-документы, не зная правильного экранирования специальных символов.Эти API обычно предлагают также эффективную реализацию, которая превосходит большинство наивных подходов.Примеры таких API: StAX, Apache XMLIO и SAX Transformer.

...