Разбор Android DOM слишком медленный - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь проанализировать веб-ответ с помощью синтаксического анализатора DOM следующим образом:

public static Document parseDocument(InputStream sr) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    dbf.setIgnoringComments(true);
    dbf.setIgnoringElementContentWhitespace(true);
    dbf.setCoalescing(true);
    //dbf.setValidating(false);
    Document xdoc = dbf.newDocumentBuilder().parse(new InputSource(sr));
    xdoc.normalize();
    return xdoc;
}

Проблема в том, что

Document xdoc = dbf.newDocumentBuilder().parse(new InputSource(sr));

занимает 3 минуты. Мой XML-файл имеет 3800 строк. Это чем normaé и как это улучшить?

Спасибо.

1 Ответ

1 голос
/ 22 февраля 2012

Это слишком велико для анализа DOM в Android.Потребление памяти и распределение объектов являются переносными.SAX, как и в предыдущем ответе, является работоспособным решением, но Pull-Parser (также содержащийся в API-интерфейсах для Android) является лучшим и более современным выбором, так как его легче программировать (с помощью SAX parser управляет обработкой и передает XML-события в ваш обработчик, в то время как XPP это делаетваше приложение запускает синтаксический анализатор и извлекает события xml из потока)

Еще лучшим выбором будет некоторая облегченная среда привязки данных, построенная на основе парсера pull - jackson, xstream и т. д. Они будут доставлять только объекты, а вы - нетнадо беспокоиться о разборе xml вообще

...