Xml теги атрибуты. XML Атрибуты. Элементы XML. Пустые и непустые элементы XML

Элементы и атрибуты в XML Схеме

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

– Простое содержимое. Элемент содержит только текст (хотя, как говорилось в предыдущем параграфе, текст можно ограничить данными отдельного типа, такими как дата или числовое значение). Содержимое этого типа определяет­ся при помощи элемента simpleContent.

– Толькоэлементы. Элемент содержит только вложенные элементы. Содержи­мое этого типа определяется при помощи элемента complexType.

– Смешанноесодержимое. Элемент может содержать и текстовое содержимое, и вложенные элементы. XML Schema требует, чтобы последовательность элементов и текстового со­дер­жимого была строго определена, и допустимые документы должны соот­ветствовать этой последовательности.

– Пустоесодержимое. Элемент содержит только атрибуты, и никакого тексто­вого содержимого. XML Schema интерпретирует такие элементы как особый случай содержимого типа «только элементы» без объявленных элементов.

– Любоесодержимое. Элемент может быть пустым, содержать вложенные эле­менты и/или текст. Содержимое этого типа определяется при помощи эле­мента anyТуре.

Эти базовые типы элементов могут задаваться в объявлениях элементов схемы. Кроме того, можно указать, что элемент может встречаться в документе несколько раз, и задать минимальное и максимальное количество вхождений. Подобно SQL, XML Schema поддерживает значение элементов NULL, указывающее, что содержи­мое элемента неизвестно. В терминологии XML это значение называется nil, но смысл его тот же самый. Поддержка этого значения упрощает перенос данных ме­жду XML и столбцами баз данных, которые могут содержать значения NULL.

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

Аналогичные возможности имеются и для управления атрибутами. Отдельный атрибут можно определить как обязательный или необязательный. Можно за­дать значение атрибута по умолчанию, которое будет использоваться в том случае, если значение этого атрибута не задано. Можно задать фиксированное значение атрибута, то есть неизменное значение для этого атрибута. Можно определить имя группы атрибутов, которые всегда используются вместе, после этого для оп­ределения группы атрибутов для очередного элемента схемы достаточно задать только имя этой группы.

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

Образец, с которым я столкнулся, по существу выглядит примерно так:

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

something something something something something

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

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

20 ответов

Я использую это правило:

  • Атрибут - это то, что является самодостаточным, т.е. цвет, идентификатор, имя.
  • Элемент - это то, что делает или может иметь собственные атрибуты или содержать другие элементы.

Итак, ваш близок. Я бы сделал что-то вроде:

EDIT : обновлен исходный пример, основанный на обратной связи ниже.

something XYX YYZ

Некоторые из проблем с атрибутами:

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

Если вы используете атрибуты в качестве контейнеров для данных, вы получаете документы, которые трудно читать и поддерживать. Попытайтесь использовать элементы для описания данных. Используйте атрибуты только для предоставления информации, не относящейся к данным.

Не заканчивайте так (это не то, как следует использовать XML):

"XML" означает "расширяемый язык разметки". Язык разметки подразумевает, что данные представляют собой текст, помеченный метаданными о структуре или форматировании.

XHTML - пример XML, используемый так, как он был предназначен:

El Jefe insists that you MUST complete your project by Friday.

Здесь различается различие между элементами и атрибутами. Текстовые элементы отображаются в браузере, а атрибуты - инструкции о том, как их отображать (хотя есть несколько тегов, которые не работают таким образом).

Путаница возникает, когда XML используется не как язык разметки, а как язык сериализации данных, в котором различие между "данными" и "метаданными" более неопределенно. Таким образом, выбор между элементами и атрибутами более или менее произволен, за исключением вещей, которые не могут быть представлены атрибутами (см. Ответ feenster).

XML - это соглашение. Сначала отложите все существующие схемы XML или установленные соглашения в рамках вашего сообщества или отрасли.

Если вы действительно в ситуации, чтобы определить свою схему с нуля, вот некоторые общие соображения, которые должны сообщать о выборе элемента vs :

Content Hierarchical

  1. order
Can reference to re-use For humans Extreme use leads to document bloat Unique or non-unique names SAX parse: read later DTD: no default value

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

Однако XML, используемый в качестве транспорта сообщений, часто лучше использовать большее количество элементов.

Например, скажем, что у нас был этот XML, как предлагается в ответе: -

XYX YYZ

Теперь мы хотим отправить элемент ITEM на устройство для печати штрих-кода, однако есть выбор типов кодирования. Как мы представляем требуемый тип кодирования? Неожиданно мы несколько с опозданием понимаем, что штрих-код не является одним автоматическим значением, а скорее может быть квалифицирован с кодировкой, требуемой при печати. ​​

something XYX YYZ

Дело в том, что если вы не строите какой-либо XSD или DTD вместе с пространством имен, чтобы исправить структуру в камне, вам может быть лучше всего оставить свои варианты открытыми.

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

Предпочтение атрибутов заключается в следующем:

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

Я добавил, когда технически возможно, потому что бывают случаи, когда использование атрибутов невозможно. Например, выбор набора атрибутов. Например использование (startDate и endDate) xor (startTS и endTS) невозможно с текущим языком схемы

Если XML Schema начинает разрешать ограниченную или расширенную модель контента "все", я бы, вероятно, сбросил ее

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

XHTML - это одна область, где атрибуты имеют естественное использование (например, в class= "foo"). Атрибуты не имеют порядка, и это может облегчить для некоторых людей разработку инструментов. Атрибуты OTOH сложнее вводить без схемы. Я также нахожу атрибуты с именами (foo: bar = "zork"), которые зачастую сложнее управлять в различных наборах инструментов. Но посмотрите на некоторые из языков W3C, чтобы увидеть смесь, которая является общей. SVG, XSLT, XSD, MathML - некоторые примеры хорошо известных языков, и все они имеют богатый запас атрибутов и элементов. Некоторые языки даже допускают больше, чем один способ, например,

;

bar; ;

Обратите внимание, что они НЕ эквивалентны синтаксически и требуют явной поддержки в инструментах обработки)

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

Наконец, убедитесь, что вы различаете пространства имен из атрибутов. Некоторые XML-системы (например, Linq) представляют пространства имен в качестве атрибутов API. ИМО это уродливое и потенциально запутанное.

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

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

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

XML, как известно, громоздкий. Для транспортировки и хранения настоятельно рекомендуется сжатие, если вы можете позволить себе вычислительную мощность. XML сжимается хорошо, иногда феноменально хорошо, из-за его повторяемости. У меня было сжатие больших файлов до менее чем 5% от их первоначального размера.

Еще один момент, чтобы укрепить вашу позицию, заключается в том, что в то время как другая команда спорит о стиле (в том, что большинство инструментов XML будут обрабатывать полностью атрибутный документ так же просто, как и документ all-# PCDATA), вы утверждаете практичность. Хотя стиль не может быть полностью проигнорирован, технические достоинства должны нести больше веса.

Использовать элементы для данных и атрибутов для метаданных (данные о данных элемента).

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

Помните, что XML должен быть машиносчитываемым, не читаемым человеком, а для больших документов XML сжимается очень хорошо.

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

Каким бы интуитивно не было смысла, поскольку объекты должны вписываться в элементы. Его атрибуты (или свойства) будут атрибутами для этих элементов в xml или дочернем элементе с атрибутом.

Я думаю, что для более простых случаев, как в примере, аналогия объектной ориентации работает нормально, чтобы определить, что является элементом и который является атрибутом элемента.

вопрос в миллион долларов!

Вначале не беспокойтесь о производительности. вы будете удивлены тому, как быстро оптимизированный синтаксический анализатор xml будет копировать ваш XML файл. что более важно, каков ваш дизайн на будущее: по мере развития XML, как вы будете поддерживать свободную связь и функциональную совместимость?

более конкретно, вы можете сделать контентную модель элемента более сложной, но сложнее расширить атрибут.

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

Например, я предпочитаю.....

Вместо....

Rory Becker 30 Travis Illig 32 Scott Hanselman 34

Однако, если у меня есть данные, которые не могут легко отображаться внутри, например, 20-30 символов или содержат много кавычек или других символов, которые нужно экранировать, я бы сказал, что это время, чтобы разбить элементы... возможно, с блоками CData.

A programmer whose interested in all sorts of misc stuff. His Blog can be found at http://rorybecker.blogspot.com and he on twitter as @RoryBecker A cool guy for who has helped me out with all sorts of SVn information Scott works for MS and has a great podcast available at http://www.hanselminutes.com

XML элементы могут иметь атрибуты, так же, как HTML.

Атрибуты предназначены для содержат данные, относящиеся к конкретному элементу.

XML-атрибуты должны быть заключены в кавычки

Значения атрибутов всегда должны быть заключены в кавычки. Либо одинарные или двойные кавычки могут быть использованы.

Для пола человека, то Элемент может быть записан следующим образом:

или как это:

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

или вы можете использовать символьные сущности:

XML Элементы против атрибутов

Посмотрите на эти примеры:

Anna
Smith


female
Anna
Smith

В первом примере пола является атрибутом. В последнем, пол является элементом. Оба примера дают ту же информацию.

Там нет никаких правил о том, когда использовать атрибуты или когда использовать элементы в XML.

Мой любимый способ

Следующие три XML-документы содержат точно такую ​​же информацию:

Атрибут дата используется в первом примере:


Tove
Jani

элемент используется во втором примере:


2008-01-10
Tove
Jani

Развернутое элемент используется в третьем примере: (THIS IS MY FAVORITE) :



2008
01
10

Tove
Jani

Избегайте XML-атрибутов?

Некоторые вещи, чтобы учитывать при использовании атрибуты:

  • атрибуты не могут содержать несколько значений (elements can)
  • атрибуты не могут содержать древовидные структуры (elements can)
  • атрибуты не легко расширяемой (for future changes)

Не в конечном итоге, как это:

to="Tove" from="Jani" heading="Reminder"
body="Don"t forget me this weekend!">

XML-атрибуты для метаданных



Tove
Jani
Reminder
Don"t forget me this weekend!


Jani
Tove
Re: Reminder
I will not

id атрибутов выше для идентификации различных нот. Это не является частью самой ноты.

То, что я пытаюсь сказать здесь, что метаданные (data about data) должны быть сохранены в качестве атрибутов, а сами данные должны быть сохранены в качестве элементов.

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

Атрибуты предоставляют дополнительную информацию об элементе.

XML атрибуты

В HTML атрибуты предоставляют некоторую дополнительную информацию об элементе:

Атрибуты часто предоставляют информацию, не являющуюся частью данных. В примере ниже тип файла не зависит от данных, но эта информация может быть важна для приложений, которые будут манипулировать этим элементом:

computer.gif

XML атрибуты должны заключаться в кавычки

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

либо так:

Если значение атрибута само содержит двойные кавычки, то можно использовать одинарные кавычки. Например:

либо использовать символы сущностей:

XML элементы или атрибуты

Посмотрите на следующие примеры:

Пример №1

Anna Smith

Пример №2

female Anna Smith

В первом примере пол указан в атрибуте. Во втором, пол записан, как элемент. Оба примера предоставляют одну и ту же информацию.

Нет правил, регулирующих то, когда использовать атрибуты, а когда элементы. Атрибуты широко используются в HTML. В XML, на мой взгляд, лучше их избегать, и вместо них использовать элементы.

Что лучше?

Следующие три XML документа содержат совершенно одинаковую информацию:

Дата записана, как атрибут :

Tove Jani Напоминание

Дата записана, как элемент :

10/01/2008 Tove Jani Напоминание Не забудь обо мне в эти выходные!

Дата записана, как расширенный элемент (На мой взгляд наилучший вариант):

10 01 2008 Tove Jani Напоминание Не забудь обо мне в эти выходные!

Избегать XML атрибуты?

При использовании атрибутов возникают некоторые проблемы:

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

Никогда не используйте следующие конструкции:

XML атрибуты для метаданных

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

Tove Jani Напоминание Не забудь обо мне в эти выходные! Jani Tove Re: Напоминание Не забуду

В приведенном примере атрибут id используется для идентификации разных заметок. Эта информация не является частью самой заметки.

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

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое.


Атрибуты XML файла

В прошлой статье Вы узнали, как работать с элементами и узлами XML файла. В этой статье Вы узнаете, что такое атрибуты, а так же разберем основные операции с ними, такие как создание, изменение, удаление и добавление атрибута, используя язык c#.

Как упоминалось ранее, в предыдущих статьях, элементы XML файла могут иметь любое количество, неповторяющихся атрибутов, в которых Вы можете хранить различную информацию. То есть у одного элемента не может быть, к примеру, два атрибута “id”, но может быть сразу несколько атрибутов: “id”, “name”, “code” и так далее. Ещё стоит запомнить, что атрибуты xml файла заключаются в двойные кавычки.

Элемент car, содержит 1 атрибут id, который имеет значение 1.

Элемент car, содержит 2 атрибута: id и code.

Неправильно, используется повторяющийся атрибут.

Если Вы не знакомы с языком XML или не знаете, что такое xml dom , то советую прочитать статью: .

Переходим к практике.

Для начала потребуется создать пустой , содержащий один root элемент .

В результате должно получиться вот так

Теперь рассмотрим базовые операции с атрибутами.

Как создать атрибут XML файла

Для того чтобы создать новый атрибут можно воспользоваться методом SetAttribute класса System.Xml.XmlElement, который позволяет создавать и изменять атрибуты элементов.

В первом примере создадим элемент “garage” с атрибутом “id”, которому присвоим значение 3.

Class Program { static string fileName = @"C:\atr\1.xml"; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); XmlElement elmGarage = xmlDoc.CreateElement("garage"); elmGarage.SetAttribute("id", "3"); xmlDoc.DocumentElement.AppendChild(elmGarage); xmlDoc.Save(fileName); } }

результат

Как создать несколько атрибутов

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

ElmGarage.SetAttribute("id", "3"); elmGarage.SetAttribute("count", "1"); //Добавили elmGarage.SetAttribute("shortCode", "456"); //Добавили

Теперь будет создано 3 атрибута: “id”, “count”, “shortCode” и 3 значения: 3, 1, 456.

Ещё один способ.

Так как атрибуты xml элементов имеют имя и значение, то для хранения таких данных хорошо подходит SortedList , где T-имя атрибута K-значение.

Class Program { static string fileName = @"C:\atr\1.xml"; static SortedList sortlist; sortlist = new SortedList(); static void Main(string args) { //заполняем атрибутами и значениями sortlist.Add("id", "3"); sortlist.Add("count", "1"); sortlist.Add("shortCode", "456"); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); //Создаем новый элемент garage XmlElement elmGarage = xmlDoc.CreateElement("garage"); //Добавляем в него атрибуты и значения foreach (var item in sortlist) { elmGarage.SetAttribute(item.Key, item.Value); } //Добавляем в дерево наш новый элемент xmlDoc.DocumentElement.AppendChild(elmGarage); //Для проверки выводим кол-во созданных атрибутов Console.WriteLine("Кол-во добавленных атрибутов: {0}", elmGarage.Attributes.Count); //Сохраняемся xmlDoc.Save(fileName); } }

результат

Как изменить значение атрибута XML файла

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

Class Program { static string fileName = @"C:\atr\1.xml"; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); //Если данного атрибута id нет, то он будет создан xmlDoc.DocumentElement["garage"].SetAttribute("id", "5"); xmlDoc.Save(fileName); } }

Ещё один способ работы с атрибутами, это работа с классом . В нашем примере, мы сначала получаем все атрибуты элемента garage, после чего применяем метод GetNamedItem , который находит нужный нам атрибут. После чего с помощью свойства InnerText, изменим значение атрибута.

Class Program { static string fileName = @"C:\atr\1.xml"; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); //Получаем все атрибуты элемента garage XmlAttributeCollection atrCol; atrCol = xmlDoc.DocumentElement["garage"].Attributes; //изменяем значение атрибута id atrCol.GetNamedItem("id").InnerText = "5"; xmlDoc.Save(fileName); } }

результат

В следующем примере, показано, как можно присвоить одно и тоже значение всем атрибутам одного элемента. Сначала так же получим все атрибуты, затем при помощи метода Item(i) можно перемещаться по атрибутам, используя индекс, как в обычном массиве.

Class Program { static string fileName = @"C:\atr\1.xml"; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); XmlAttributeCollection atrCol = xmlDoc. DocumentElement["garage"].Attributes; for (int i = 0; i < atrCol.Count; i++) { atrCol.Item(i).InnerText = "8"; } xmlDoc.Save(fileName); } }

результат

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

В качестве примера создадим массив, пусть он содержит два числа, каждое число — это новое значение для атрибута: “id” и “count” элемента “garage”.

Class Program { static string fileName = @"C:\atr\1.xml"; static int arValues = {77, 76}; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); XmlAttributeCollection atrCol = xmlDoc. DocumentElement["garage"].Attributes; for (int i = 0; i < atrCol.Count; i++) { atrCol.Item(i).InnerText = arValues[i].ToString(); } xmlDoc.Save(fileName); } }

результат

Как удалить атрибут элемента в XML файле

Создавать и изменить атрибуты научились. Если вам были не понятны, какие-то строки кода, то можете прочитать статью: , где всё подробно описано.

Чтобы удалить атрибут , нужно выполнить метод RemoveAt, в качестве параметра передаем индекс удаляемого атрибута.

Class Program { static string fileName = @"C:\atr\1.xml"; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); //Получаем все атрибуты элемента garage XmlAttributeCollection atrCol = xmlDoc. DocumentElement["garage"].Attributes; atrCol.RemoveAt(1); xmlDoc.Save(fileName); } }

результат

Как удалить несколько атрибутов

Если нужно удалить сразу оба атрибута “id” и “count” или ещё большее количество, то для такого случая подойдет метод RemoveAll.

Class Program { static string fileName = @"C:\atr\1.xml"; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); //Получаем все атрибуты элемента garage XmlAttributeCollection atrCol = xmlDoc. DocumentElement["garage"].Attributes; //удалить оба атрибута id и count atrCol.RemoveAll(); xmlDoc.Save(fileName); } }

результат

Добавление нового атрибута

В конце ещё один пример, в котором показана работа двух методов: InsertBefore и InsertAfter, которые позволяют добавить новый атрибут элементу XML файлалибо перед, каким-то уже существующим атрибутом, либо после него.

Class Program { static string strFilename = @"C:\atr\1.xml"; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strFilename); //Получаем все атрибуты элемента garage XmlAttributeCollection atrCol = xmlDoc. DocumentElement["garage"].Attributes; //Создаем новый атрибут XmlAttribute atrDate = xmlDoc.CreateAttribute("date"); atrDate.Value = DateTime.Now.ToShortDateString(); //Добавим в коллекцию новый атрибут atrCol.Append(atrDate); //Уберите комментарий возле нужного метода. //Вставить атрибут date после атрибута id //atrCol.InsertBefore(atrCol["id"], atrDate); //Вставить атрибут date перед атрибутом id //atrCol.InsertAfter(atrCol["id"], atrDate); xmlDoc.Save(strFilename); } }

результат

Добавление в коллекцию

Как получить значение атрибута xml файла у нескольких узлов

Дан xml файл, который содержит два узла(node) по имени car, которые в свою очередь имеют по одному атрибуту id.

Задача: получить значение атрибута id всех узлов car.

Class Program { static string fileName = @" C:\example\garage.xml"; static void Main(string args) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); //Получаем все узлы, имеющие имя car XmlNodeList nodeList= xmlDoc.GetElementsByTagName("car"); //Выводим значения атрибута id у всех найденных узлов car foreach (XmlNode xmlnode in nodeList) { Console.WriteLine(xmlnode.Attributes["id"].InnerText); } Console.ReadLine(); } //Сохранение не требуется }

Результат:

Как изменить значение атрибута xml файла у нескольких узлов

Задача: увеличить текущее значение атрибута id у каждого узла на определённое значение.

Class Program { static string fileName = @"C:\example\garage.xml"; static void Main(string args) { //Значение, на которое будем увеличивать текущее значение атрибута int changeValue = 900; //временная переменная для хранения нового значения int newValue = 0; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); //Получаем все узлы, имеющие имя car XmlNodeList nodeList= xmlDoc.GetElementsByTagName("car"); foreach (XmlNode xmlnode in nodeList) { //Получаем текущее значение атрибута id //и увеличиваем его, например на 900. newValue = int.Parse(xmlnode.Attributes["id"].InnerText) + changeValue; //Заносим новое значение xmlnode.Attributes.InnerText = newValue.ToString(); } //Сохраняем изменения xmlDoc.Save(fileName); } }

* У коллекции Attributes в скобках можно указать, как имя атрибута Attributes[«id»] так и index Attributes