Сжатие и уменьшение размера XML уже более десяти лет является проблемой, особенно в мобильной связи, где пропускная способность и вычислительные мощности клиентов ограничены. Конечное решение, используемое в беспроводной связи, которое я предпочитаю использовать, если у меня достаточно контроля на стороне клиента и сервера, - WBXML ( WAP Binary XML Spec ).
Эта спецификация определяет, как преобразовать XML в двоичный формат, который не только компактен, но и прост для анализа. Это отличается от методов сжатия общего назначения, таких как gzip, которые требуют высокой вычислительной мощности и памяти на стороне приемника для распаковки и последующего анализа содержимого XML. Единственным недостатком этой спецификации является то, что таблица токенов приложения должна существовать с обеих сторон, которая является статически определенной кодовой таблицей, чтобы хранить двоичные значения для всех возможных тегов и атрибутов в XML-контенте приложения. Сегодня этот формат широко используется в мобильной связи для передачи конфигурации и данных в большинстве приложений, таких как конфигурация OTA и синхронизация контактов / заметок / календаря / электронной почты.
Для передачи большого XML-контента с использованием этого формата вы можете использовать механизм разбиения на блоки, аналогичный тому, который предложен в протоколе SyncML. Вы можете найти проектный документ здесь , описывающий этот механизм в разделе «2.6. Обработка больших объектов». Как краткое вступление:
Эта функция предоставляет средства для синхронизации объекта, размер которого превышает размер, который может быть передан в одном сообщении (например, максимальный размер сообщения - объявлен в MaxMsgSize).
элемент - то, что целевое устройство может получить). Это достигается путем разбиения объекта на куски, каждый из которых поместится в одном сообщении, и последовательной их отправки. Первая порция данных отправляется с общим размером объекта и тегом MoreData, сигнализирующим, что будет отправлено больше порций. Каждый последующий блок отправляется с тегом MoreData, кроме последнего.