Каков наилучший / правильный / самый эффективный способ сохранить ряд данных в XML - PullRequest
3 голосов
/ 05 июня 2010

У меня есть приложение, которое будет хранить серию (float) значений в файле XML. Может быть более 100 000 значений, поэтому я заинтересован в уменьшении размера, но я также хочу, чтобы файлы были легко доступны третьим лицам

Кажется, мне доступны различные методы кодирования данных в XML:

1

<data>
  <value>12.34</value>
  <value>56.78</value>
  ...
  <value>90.12</value>
</data>

2.

<data>
  <value v="12.34"/>
  <value v="56.78"/>
  ...
  <value v="90.12"/>
</data> 

3.

<data>12.34
56.78
  ...
90.12
</data> 

4

<data>12.34, 56.78, ... 90.12</data> 

и, возможно, есть и другие варианты.

Мне просто любопытно знать недостатки (если есть) каждого из этих подходов. Некоторые могут не соответствовать, например.

Ответы [ 4 ]

3 голосов
/ 05 июня 2010

Семантически, нет «разницы» между 1 и 2. Точно так же нет разницы между 3 и 4, за исключением того, что один разделен. Также обратите внимание, что пробел в XML может быть проигнорирован / может игнорироваться, поэтому, если вы прочитаете # 3, он может оказаться «одной длинной строкой» без разделительных строк.

Что лучше, это зависит от вашего приложения и от того, как вы планируете использовать данные.

Сериализованная версия (с каждым номером в отдельном элементе) дает пользователю «прямой» доступ к отдельным номерам.

Использование «BLOB-объекта» с разделителями требует, чтобы пользователи анализировали его самостоятельно, поэтому это зависит от того, какой интерфейс вы хотите предоставить.

Кроме того, метод «blob» предотвращает «потоковую передачу» XML, поскольку у вас будет один огромный элемент, а не кучка маленьких элементов. Это может иметь большое влияние на память.

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

3 голосов
/ 05 июня 2010

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

<data>
   <item key="somekey1" value="somevalue1" />
   <item key="somekey2" value="somevalue2" />
   <item key="somekey3" value="somevalue3" />
</data>

Просто потому, что это приятно и легко читается, а теги меньше.

EDIT:

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

<d>
   <i k="somekey1" v="somevalue1" />
   <i k="somekey2" v="somevalue2" />
   <i k="somekey3" v="somevalue3" />
</d>

EDIT:

Кроме того, я знаю, что вы не спрашивали, но я решил показать вам, как будет выглядеть JSON

   [{ "key": "somevalue1", "value": "somevalue1"},
    { "key": "somevalue2", "value": "somevalue2"}]
2 голосов
/ 05 июня 2010

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

1 голос
/ 29 июня 2010

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

XML может быть требованием для примера, в котором вы будете использовать этот XML-файл из разных приложений / систем / пользователей с разной культурой (TR, EN, FR). Некоторые пишут с плавающей точкой "." (12.34), в то время как некоторые пишут их с ',' (12,34). Анализатор XML будет обрабатывать все эти вещи для вас. Таким образом, если XML является требованием, 3-й и 4-й примеры, которые вы написали, полностью упускают суть XML. На практике они ничем не отличаются от использования простого текстового файла, за исключением медленного дежурного анализатора XML.

1-й и 2-й образцы, которые вы написали, имеют лишь незначительную разницу в значении / интерпретации. Первый подразумевает, что фактические данные, которые вы хотели бы представить, - 12,34, и это «значение». Второе подразумевает, что есть «значение», и данные «v», связанные с ним, равны 12,34.

...