XML-Документы
На сегодняшний день 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#.