Большие XML-файлы и разбивка на страницы, возможно ли это?

StackOverflow https://stackoverflow.com/questions/2013996

  •  19-09-2019
  •  | 
  •  

Вопрос

Проблема

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Новейший процессор SAXON XSLT также поддерживает элементарную поддержку так называемого "потокового XSLT".Читайте об этом здесь: http://www.saxonica.com/documentation/index/intro.html

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top