Какой XML-парсер вы порекомендуете для следующих целей:
XML-файл (отформатированный, содержащий пробелы) составляет около 800 МБ. В основном он содержит три типа тегов (назовем их n, w и r).
У них есть атрибут id, который я должен был бы найти как можно быстрее.
Удаление ненужных атрибутов может сэкономить около 30%, а может и чуть больше.
Первая часть для оптимизации второй части: Есть ли какой-нибудь хороший инструмент (командной строки linux и windows, если возможно) для простого удаления неиспользуемых атрибутов в определенных тегах? Я знаю, что XSLT можно использовать. Или есть легкие альтернативы? Кроме того, я мог бы разделить его на три файла, по одному для каждого тега, чтобы получить скорость для последующего анализа ...
Скорость не слишком важна для подготовки данных, конечно, было бы неплохо, если бы это заняло несколько минут, а не часов.
Вторая часть: Как только я подготовлю данные, будь они сокращены или нет, я смогу найти упомянутый мной атрибут ID, который является критичным по времени.
Оценки с использованием wc -l
говорят мне, что существует около 3M N-тегов и около 418K W-тегов. Последние могут содержать до 20 субтегов каждый. W-теги также содержат некоторые, но они будут удалены.
«Все, что мне нужно сделать» - это переходить между тегами, содержащими определенные атрибуты id. Некоторые теги имеют ссылки на другие идентификаторы, поэтому дают мне дерево, может быть, даже график. Исходные данные большие (как уже упоминалось), но набор результатов не должен быть слишком большим, поскольку мне нужно только выделить некоторые элементы.
Теперь вопрос: какую библиотеку синтаксического анализа XML я должен использовать для такого рода обработки? Я бы в первую очередь использовал Java 6, имея в виду его перенос на BlackBerry.
Может быть полезно просто создать плоский файл, индексирующий идентификаторы и указывающий на смещение в файле? Есть ли необходимость в оптимизации, упомянутой в верхней части? Или, как известно, парсер работает с исходными данными так же быстро?
Небольшое примечание: для проверки я взял идентификатор, находящийся в самой последней строке файла, и искал идентификатор с помощью grep. На Core 2 Duo это заняло около минуты.
Что произойдет, если файл станет еще больше, скажем, 5 ГБ?
Я ценю любое уведомление или рекомендацию.
Большое спасибо всем заранее и всего наилучшего