XML Dom: хранение пар ключ / значение - PullRequest
15 голосов
/ 09 октября 2009

Я новичок в работе с 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

Ответы [ 7 ]

9 голосов
/ 09 октября 2009

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

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

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

Но в этот день все зависит от того, что ВЫ предпочитаете и с чем вам удобно.

1 голос
/ 09 октября 2009

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

<k1>val1</k1>
<k2>val2</k2>
<k3>val3</k3>
0 голосов
/ 11 октября 2009

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

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

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

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

0 голосов
/ 09 октября 2009

Вы можете использовать словарь для этой цели.

Вот пример: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

0 голосов
/ 09 октября 2009

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

0 голосов
/ 09 октября 2009

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

0 голосов
/ 09 октября 2009

Путь 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> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...