XML Dom: сохранение пары ключ/значение

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

Способ 1

<item key="k1" value="val1" />
<item key="k2" value="val2" />
<item key="k3" value="val3" />

Путь 2

<item><key>k1</key><value>val1</value></item>
<item><key>k2</key><value>val2</value></item>
<item><key>k3</key><value>val3</value></item>

Путь 3

<key name="k1">val1</key>
<key name="k2">val2</key>
<key name="k3">val3</key>

Спасибо.

обновление: Тем временем я нашел это: http://www.ibm.com/developerworks/xml/library/x-eleatt.html

Ответы

Ответ 1

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

Но лично я предпочитаю путь 1 для разметки над другими.

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

Но в тот день, это касается того, что ВЫ предпочитаете и устраивают.

Ответ 2

Еще одна альтернатива, которая поражает меня как нечто большее в духе XML (предполагая, что ваши ключи являются правильными QNames, а ваши значения не включают ничего, что могло бы привести к не-правильно сформированному XML):

<k1>val1</k1>
<k2>val2</k2>
<k3>val3</k3>

Ответ 3

Путь 3 используется файлами java properties. Вот его DTD:

 <!ELEMENT properties ( comment?, entry* ) >
    <!ATTLIST properties version CDATA #FIXED "1.0">
    <!ELEMENT comment (#PCDATA) >
    <!ELEMENT entry (#PCDATA) >
    <!ATTLIST entry key CDATA #REQUIRED> 

Ответ 4

XML является гибким. Вы можете выбрать все, что захотите. Я бы выбрал 3. Я думаю, что 3 является наиболее гибким.

Ответ 5

В конце концов, я думаю, что это вопрос предпочтения, а не лучшие практики (если кто-то не может дать мне пример, почему один превосходит другого). Я предпочитаю использовать способ 3 и способ 1.

Ответ 7

Пока ключи будут действительными именами XML, а значения имеют прямое текстовое представление, я сделаю это следующим образом:

<map key1="value1" key2="value2" key3="value3".../>

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

Существует масса случаев, когда вы не можете сделать это таким образом - если 123 является допустимым ключом, например, или если значения (или ключи) являются сериализованными объектами. На самом деле это нормально, если значения являются сериализованными объектами, если вы не против, чтобы они отображались в значениях атрибутов, при этом вся разметка была экранирована.