Как мне разобрать большой XML-файл, используя Java? - PullRequest
0 голосов
/ 08 февраля 2012

Я пытаюсь проанализировать файл XML с помощью Java.

Размер файла XML составляет всего 256 КБ.Я использую синтаксический анализатор DOM для анализа XML-файла.Как я могу проанализировать содержимое большого XML-файла?

Вот метод, который анализирует содержимое файла:

public Document parse_a_string(StringBuffer decodedFile) {
    Document doc1 = null;
    try {
        DocumentBuilderFactory factory =
                DocumentBuilderFactory.newInstance();
        DocumentBuilder db = factory.newDocumentBuilder();
        InputSource inStream = new InputSource();

         // problem here
        inStream.setCharacterStream(new StringReader(decodedFile.toString()));

        doc1 = db.parse(inStream);
    } catch (Exception e) {
    }
    return doc1;
}

Содержимое файла находится в ссылочном объекте StringBuffer, decodedFile,но когда я устанавливаю StringReader, он принимает только строку.

Ответы [ 5 ]

5 голосов
/ 08 февраля 2012

Для больших документов (хотя я бы не назвал ваши большие) я бы использовал StAX .

3 голосов
/ 09 февраля 2012

256Kb - это довольно маленький файл в наши дни: вчера я работал с 45-гигабайтным файлом, который в 200 000 раз больше!

Не ясно, в чем ваша проблема.Любая из нормальных техник разбора Java будет работать отлично.Какой из них вы используете, зависит от того, почему вы анализируете файл и что вы хотите делать с данными.

Сказав это, многие люди, похоже, выбирают DOM по умолчанию, потому что он так хорошо закреплен.Однако с более современными объектными моделями, такими как JDOM или XOM , работать намного проще.

2 голосов
/ 08 февраля 2012

Возможно, вы захотите взглянуть на реализацию StAX , например Woodstox . Он позволяет вам извлекать элементы из анализатора вместо того, чтобы анализатор загружал данные в приложение, и позволяет приостанавливать анализ.

2 голосов
/ 08 февраля 2012

Взгляните на библиотеку синтаксического анализа XML * JDOM .Он намного опережает родные парсеры Java, и, на мой взгляд, довольно хорош.

Для предоставленного вами кода вам на самом деле нужно пройтись по дереву DOM и получить элементы.См. здесь или официальное руководство по Java по работе с XML для получения дополнительной информации о работе с документами XML.

0 голосов
/ 22 мая 2012

Не читайте файл в String / StringReader и все такое прочее. Разбор файла напрямую через db.parse(new FileInputStream(...)). Чтение файла в память просто тратит впустую память и время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...