This article has been localized into Russian by the community.
Запись XML с помощью класса XmlWriter
В предыдущей главе мы имели дело с чтением XML, но сейчас настало время также научиться выполнять запись. Поскольку XML является простым текстом, вы можете просто начать записывать XML-теги в файл и сохранять их с расширением xml, но намного проще и безопаснее позволить .NET фреймворку сделать это, и также как и в случае чтения XML, существует два разных способа записи: с помощью класса XmlWriter и с помощью класса XmlDocument. В этой статье будет описан первый способ, а затем мы рассмотрим запись XML с помощью XmlDocument в следующей главе.
Различие между этими двумя способами опять-таки состоит, в первую очередь, в объеме занимаемой памяти - XmlWriter использует меньше памяти, чем XmlDocument, что является проблемой, только если вы записываете файлы очень большого размера. Другое важное отличие состоит в том, что при использовании XmlDocument вы можете читать существующий файл, работать с ним и затем записывать обратно в него изменения. С помощью XmlWriter вы должны записывать весь документ с нуля каждый раз. Это не является проблемой как таковой, поэтому выбор способа, как всегда, зависит от ситуации и ваших предпочтений.
Ниже приводится пример записи в XML с использованием класса XmlWriter:
using System;
using System.Text;
using System.Xml;
namespace WritingXml
{
class Program
{
static void Main(string[] args)
{
XmlWriter xmlWriter = XmlWriter.Create("test.xml");
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("users");
xmlWriter.WriteStartElement("user");
xmlWriter.WriteAttributeString("age", "42");
xmlWriter.WriteString("John Doe");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("user");
xmlWriter.WriteAttributeString("age", "39");
xmlWriter.WriteString("Jane Doe");
xmlWriter.WriteEndDocument();
xmlWriter.Close();
}
}
}
Код, приведенный выше, создаст следующий XML:
<users>
<user age="42">John Doe</user>
<user age="39">Jane Doe</user>
</users>
Таким образом, мы начинаем с создания экземпляра класса XmlWriter. Он принимает на вход минимум один параметр, в данном случае это путь к файлу, в который производится запись, но могут применяться и другие варианты в зависимости от требуемых задач. Первая вещь, которую нам следует сделать - это вызвать метод WriteStartDocument(). После чего мы записываем начальный элемент с именем "users". XmlWriter преобразует его в <users>. Перед закрытием этого элемента мы записываем следующий начальный элемент, "user", который затем будет дочерним элементом для "users". Затем мы продолжаем добавлять атрибуты (age) в элементы с помощью метода WriteAttributeString(), и затем мы записываем внутренний текст элемента с помощью метода WriteString(). Затем мы обязательно закрываем элемент "user" с помощью метода WriteEndElement().
Этот процесс повторяется для добавления другого элемента user, однако мы не вызываем WriteEndElement(), как в прошлый раз. По факту, этот метод должен быть вызван дважды, в том числе после того как мы открыли элемент "users", но XmlWriter сделает это за нас, когда мы вызовем метод WriteEndDocument().
Чтобы XmlWriter смог записать наши данные на диск, мы вызываем метод Close(). Теперь вы можете открыть файл "test.xml" из той же директории, в которой находится EXE-файл вашего проекта, обычно это папка bin\debug.
И это в сущности все, что требуется чтобы записать простой XML-файл. В следующей главе мы сделаем то же самое, но используя класс XmlDocument.