Возможно ли использование больших файлов XML и разбивки на страницы?

Проблема

При открытии очень больших XML-файлов локально на вашем компьютере почти наверняка потребуется время для открытия этого файла - это часто может означать, что ваш компьютер зависает, потому что он думает, что не отвечает.

Это проблема, если вы обслуживаете пользователей XML-резервными копиями довольно сложных баз данных или систем, которые они используют - вероятность того, что они смогут открывать большие резервные копии, не говоря уже об их использовании, мала.

Возможна ли разбивка на страницы?

Я использую XSLT для предоставления пользователям удобочитаемых резервных копий. Таким же образом можно было бы извлекать только страницу данных за раз, чтобы предотвратить чтение всего файла за один раз, что вызовет проблемы, указанные выше.

Я полагаю, что ответ просто отрицательный, но я хотел бы знать, видел ли кто-нибудь такие же проблемы и разрешал ли их.

Примечание. Он находится только на локальном компьютере и не требует подключения к Интернету. Можно использовать JavaScript, если он упрощает задачу.


person jakeisonline    schedule 06.01.2010    source источник
comment
Ваши первые два абзаца неверны и в значительной степени не имеют отношения к вашему вопросу.   -  person bmargulies    schedule 06.01.2010
comment
+1, у меня была такая же проблема, и я изо всех сил пытался найти редактор, способный просматривать / просматривать очень большие (1 ГБ +) файлы XML.   -  person Eric Petroelje    schedule 06.01.2010
comment
@bmargulies - если вы так скажете, я бы сказал, что голоса и отличные ответы ниже это отрицают, но каждый сам по себе. @Eric - Скорее всего, вы их не найдете, так как я считаю, что все редакторы должны прочитать весь файл перед его загрузкой - хотя я иногда добивался успеха с Notepad ++.   -  person jakeisonline    schedule 07.01.2010
comment
Проблема не в открытии файлов. Это занимает миллисекунды, возможно, микросекунды на SSD. Считать их целиком в память, преобразовать в документ для просмотра - да, это требует времени. Но это критически зависит от схемы XML. Например, файлы Microsoft .docx (OOXML) открываются довольно быстро.   -  person MSalters    schedule 26.01.2010


Ответы (5)


Разбивка на страницы с помощью XSLT возможна, но, вероятно, не приведет к желаемым результатам: для работы XSLT весь XML-документ должен быть преобразован в дерево DOM.

Что вы можете сделать, так это поэкспериментировать с потоковыми преобразованиями: http://stx.sourceforge.net/

Или вы можете предварительно обработать большой XML-файл, чтобы разрезать его на более мелкие части перед обработкой с помощью XSLT. Для этого я бы использовал инструмент командной строки, например XMLStarlet.

person chiborg    schedule 06.01.2010
comment
Я думаю, что было бы проще просто разрезать файл, прежде чем предоставлять его для загрузки (в виде zip-архива) пользователю, что немного раздражает. - person jakeisonline; 05.02.2010

Отлично, очень хороший вопрос!

Я знаю, что реализации XSLT требуют DOM, поэтому они должны получать доступ ко всему документу (хотя, возможно, это можно было бы сделать ленивым способом)

В любом случае вам следует взглянуть на VTD-XML: http://vtd-xml.sourceforge.net/ < / а>

Последний процессор SAXON XSLT также поддерживает элементарную поддержку того, что называется «Streaming XSLT». Об этом читайте здесь: http://www.saxonica.com/documentation/index/intro.html

Тем не менее, резервное копирование базы данных, вероятно, не лучший вариант использования XML. Если вам нужно иметь дело с резервными копиями базы данных XML, я бы постарался как можно быстрее от них избавиться. То же самое и с журналами - линейный процесс должен работать, просто добавляя элементы. Я имею в виду, было бы даже лучше, если бы XML разрешил лес в качестве структуры верхнего уровня, но я думаю, что этого никогда не произойдет.

person Roland Bouman    schedule 06.01.2010
comment
Привет, Роланд, это многообещающий взгляд. Мне было интересно, потребует ли это, чтобы конечный пользователь установил что-нибудь, кроме браузера? Это должно быть доступно как для компьютерных фанатов, так и для нетехников. - person jakeisonline; 11.01.2010

Виртуальный XML-редактор XMLMax будет читать, анализировать и отображать XML-файл размером 1 Гб в древовидной структуре примерно за 30 секунд на быстром ПК. Только ОС Windows. Он будет работать с xml любого размера и любой структуры.

person bill seacham    schedule 26.01.2010
comment
это платное программное обеспечение с пробной версией - person userJT; 22.01.2013

Привет, я не знаю, какой язык программирования вы используете, но в C # с помощью XMLReader я могу читать тег файла по тегу, а не весь файл. Таким образом вы сможете прочитать только первую страницу и остановить чтение. С уважением, Иордан

person IordanTanev    schedule 06.01.2010

Один из способов решить эту проблему - разделить большие XML-файлы на несколько XML-документов меньшего размера. В зависимости от типа данных вы можете разделить или разделить файл любым количеством способов (например, день, транзакция, сущность и т. Д.).

Конечно, это вызовет ряд других проблем. Например, вам придется разработать специализированный парсер, если вам нужно просматривать данные в целом или по разделам.

person Saul Dolgin    schedule 06.01.2010