Сохранение XML

93

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

Сохранение с помощью XDocument.Save()

Сохранять XML-документ можно с использованием любого из нескольких методов XDocument.Save. Вот список его прототипов:

void XDocument.Save(string filename);
void XDocument.Save(TextWriter textWriter);
void XDocument.Save(XmlWriter writer);
void XDocument.Save(string filename, SaveOptions options);
void XDocument.Save(TextWriter textWriter, SaveOptions options);

Ниже приведен пример сохранения XML-документа в файле, находящемся в папке проекта:

XDocument xDoc = new XDocument(
                new XElement("Employees",
                    new XElement("Employee",
                        new XAttribute("type","Programmer"),
                        new XAttribute("language","Russian"),
                        new XElement("FirstName", "Alex"),
                        new XElement("LastName", "Erohin"))));
xDoc.Save("employees.xml");

Обратите внимание, что метод Save вызывается на объекте типа XDocument. Причина в том, что методы Save являются методами экземпляра. Методы Load, которые рассматриваются в следующей статье "Ввод XML", являются статическими и должны вызываться на классе XDocument или XElement.

Ниже приведено содержимое сгенерированного файла employees.xml при просмотре его в простом текстовом редакторе:

<?xml version="1.0" encoding="utf-8"?>
<Employees>
  <Employee type="Programmer" language="Russian">
    <FirstName>Alex</FirstName>
    <LastName>Erohin</LastName>
  </Employee>
</Employees>

Этот вывод XML-документа легко читается, поскольку вызванная версия метода Save форматирует вывод. То есть, если вызвать версию метода Save, принимающую строку имени файла и аргумент SaveOptions, передав в нем значение SaveOptions.None, то получится тот же результат, что и раньше. Но если вызвать метод Save следующим образом:

xDoc.Save("employees.xml",SaveOptions.DisableFormatting);

то результат в файле будет выглядеть так:

<?xml version="1.0" encoding="utf-8"?><Employees><Employee type="Programmer" language="Russian"><FirstName>Alex</FirstName><LastName>Erohin</LastName></Employee></Employees>

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

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

Сохранение с помощью XElement.Save()

Уже много раз говорилось, что в LINQ to XML создавать XML-документ не обязательно. Также не обязательно это делать для сохранения XML-файла. Класс XElement также имеет несколько методов Save, предназначенных для этой цели:

void XElement.Save(string filename);
void XElement.Save(TextWriter textWriter);
void XElement.Save(XmlWriter writer);
void XElement.Save(string filename, SaveOptions options);
void XElement.Save(TextWriter textWriter, SaveOptions options);

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

XElement xElement = new XElement("Employees",
                    new XElement("Employee",
                        new XAttribute("type","Programmer"),
                        new XAttribute("language","Russian"),
                        new XElement("FirstName", "Alex"),
                        new XElement("LastName", "Erohin")));
xElement.Save("employees.xml", SaveOptions.None);

Сохраненный XML выглядит идентично предыдущему примеру, где в действительности существовал XML-документ.

Пройди тесты
Лучший чат для C# программистов