Атрибут против дочернего узла - PullRequest
1 голос
/ 25 июня 2011

Я новичок в XML и мне интересно, когда мне следует использовать атрибут, и когда я должен использовать дочерний узел.

Полагаю, мне следует использовать атрибут, если я хочу использовать это поле как индекс.

Например, в настоящее время я (в целях ознакомления с XML) создаю программу для ведения журналов, поэтому у меня есть 2 основных поля: «datetime» и «text» Я думаю, что, возможно, datetime должен быть атрибутом

Ответы [ 2 ]

1 голос
/ 25 июня 2011

Главное в атрибутах - это то, что они уникальны для каждого элемента.Это означает, что атрибут не может быть объявлен с одним и тем же именем несколько раз, поэтому обычно рекомендуется использовать его для хранения вещей, которые не должны иметь более одного значения.Также из-за синтаксиса и того факта, что они объявлены в теге элемента, я считаю полезным использовать их для вещей, которые пугающе связаны с этим элементом, таких как идентификаторы.

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

Для вашего конкретного вопроса да я бы использовал атрибут для метки времени и поместил бы текст между тегами элемента.

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

Например, если вы записываете текст, в котором есть символ <, создающий что-то вроде: </p>

это сломало бы XML <прямо там.</Log>

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

это сломало бы XML <прямо там.</Log>

Надеюсь, это поможет и удачи.

0 голосов
/ 25 июня 2011

Атрибут не может иметь CData (специальные символы), но узел может иметь. Так что, если вам нужно поместить CData, вы не можете иметь его в атрибуте. Это главное, что я учитываю при принятии решения.

...