Сохранение XML
93LINQ --- LINQ to XML --- Сохранение XML
Естественно, создание, модификация и удаление данных 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-документ.