На сегодняшний день XML является одним из распространенных стандартов документов, который позволяет в удобной форме сохранять сложные по структуре данные. Поэтому разработчики платформы .NET включили в фреймворк широкие возможности для работы с XML.
Прежде чем перейти непосредственно к работе с XML-файлами, сначала рассмотрим, что представляет собой xml-документ и как он может хранить объекты, используемые в программе на c#.
Например, у нас есть следующий класс:
class Person { public string Name { get;} public int Age { get; set; } public string Company { get; set; } public Person(string name, int age, string company) { Name = name; Age = age; Company = company; } }
В программе на C# мы можем создать список объектов класса Person:
var employees = new List<Person> { new Person ("Tom", 37, "Microsoft"), new Person ("Bob", 41, "Google") };
Чтобы сохранить список в формате xml мы могли бы использовать следующий xml-файл:
<?xml version="1.0" encoding="utf-8" ?> <people> <person name="Tom"> <company>Microsoft</company> <age>37</age> </person> <person name="Bob"> <company>Google</company> <age>41</age> </person> </people>
XML-документ объявляет строка <?xml version="1.0" encoding="utf-8" ?>
. Она задает версию (1.0) и кодировку (utf-8) xml. Далее идет
собственно содержимое документа.
XML-документ должен иметь один единственный корневой элемент, внутрь которого помещаются все остальные элементы. В данном случае таким элементом является
элемент <people>
. Внутри корневого элемента <people>
задан набор элементов <person>
. Вне корневого элемента
мы не можем разместить элементы person
.
Каждый элемент определяется с помощью открывающего и закрывающего тегов, например, <person>
и </person>
, внутри которых
помещается значение или содержимое элементов. Также элемент может иметь сокращенное объявление: <person />
- в конце элемента помещается слеш.
Элемент может иметь вложенные элементы и атрибуты. В данном случае каждый элемент person имеет два вложенных элемента company
и
age
и атрибут name
.
Атрибуты определяются в теле элемента и имеют следующую форму: название="значение"
. Например, <person name="Bill Gates">
,
в данном случае атрибут называется name
и имеет значение Bill Gates
Внутри простых элементов помещается их значение. Например, <company>Google</company>
- элемент company
имеет значение
Google
.
Названия элементов являются регистрозависимыми, поэтому <company>
и <COMPANY>
будут представлять разные элементы.
Таким образом, весь список Users из кода C# сопоставляется с корневым элементом <people>
, каждый объект Person - с элементом <person>
,
а каждое свойство объекта Person - с атрибутом или вложенным элементом элемента <person>
Что использовать для свойств - вложенные элементы или атрибуты? Это вопрос предпочтений - мы можем использовать как атрибуты, так и вложенные элементы. Так, в предыдущем примере вполне можно использовать вместо атрибута вложенный элемент:
<?xml version="1.0" encoding="utf-8" ?> <people> <person> <name>Tom</name> <company>Microsoft</company> <age>37</age> </person> <person> <name>Bob</name> <company>Google</company> <age>41</age> </person> </people>
Теперь рассмотрим основные подходы для работы с XML, которые имеются в C#.