Используйте SAX parser. Анализаторы SAX предназначены для обработки огромных XML-файлов. Вместо того, чтобы загружать XML-файл в память за один раз, он просматривает документ поэтапно и уведомляет вас.
Кроме того, если XML-файл действительно большой, вы также можете посмотреть, как загружается файл. Не открывайте файл и не загружайте все содержимое в парсер SAX за один раз. Вместо этого прочитайте его кусок по блоку (например, блоки 4Kb за раз) и подайте его в парсер SAX.
Редактировать: парсер SAX работает совсем по-другому, чем парсер DOM. В принципе, он просто проходит через документ по одному элементу за раз. Всякий раз, когда он находит открытый или закрытый тег, он вызывает одну из ваших функций (в качестве обратного вызова) и сообщает ему, что такое тег и какие данные (если есть). Он начинается с самого начала и проходит до конца и никогда не возвращается. Это серийный номер. Это означает две вещи:
Больше кода. Ваш обратный вызов должен определять, что делать, когда встречаются определенные теги, какие теги должны быть пропущены и т. Д. Парсер SAX не возвращается, поэтому, если вам нужно что-то помнить позже, вам нужно все это сделать. Так что да, будет больше работать со многими API-интерфейсами, содержащими множество разных тегов.
Он может анализировать частичный XML. Не важно, что вы кормите, если только первые 4 Кбайта XML-файла. Он не будет генерировать ошибку, но просто попросите другие данные куска, когда это будет сделано. Только тогда, когда он встретит несогласованный закрывающий тег (или вы перестанете кормить его данные слишком рано), он будет генерировать ошибку.
Так что, это больше работы. Но выигрыш гораздо выше скорости и не проблема с синтаксическим анализом огромных файлов, которые не вписывались бы в память.
спасибо за ваши комментарии. но можно ли легко анализировать с помощью анализатора SAX со многими столбцами? У меня 40 столбцов в API, и есть 20 таких API. Легко ли это? и Я не понимаю, как сделать кусок по куску? На мой взгляд, если мы храним только 4kb, тогда он будет хранить полный файл xml? не с отсутствующим тегом конца? помогите мне ... – Vethalam 2010-12-06 06:35:22