Как создать xml файл c
Еще один подход к работе с Xml представляет технология LINQ to XML . Вся функциональность LINQ to XML содержится в пространстве имен System.Xml.Linq . Рассмотрим основные классы этого пространства имен:
XAttribute : представляет атрибут xml-элемента
XComment : представляет комментарий
XDocument : представляет весь xml-документ
XElement : представляет отдельный xml-элемент
Ключевым классом является XElement , который позволяет получать вложенные элементы и управлять ими. Среди его методов можно отметить следующие:
Add() : добавляет новый атрибут или элемент
Attributes() : возвращает коллекцию атрибутов для данного элемента
Elements() : возвращает все дочерние элементы данного элемента
Remove() : удаляет данный элемент из родительского объекта
RemoveAll() : удаляет все дочерние элементы и атрибуты у данного элемента
Итак, используем функциональность LINQ to XML и создадим новый XML-документ:
Чтобы создать документ, нам нужно создать объект класса XDocument . Это объект самого верхнего уровня в хml-документе.
Элементы создаются с помощью конструктора класса XElement . Конструктор имеет ряд перегруженных версий. Первый параметр конструктора передает название элемента, например, person. Второй параметр передает значение этого элемента.
Создание атрибута аналогично созданию элемента. Затем все атрибуты и элементы добавляются в элементы person с помощью метода Add() .
Так как документ xml должен иметь один корневой элемент, то затем все элементы person добавляются в один контейнер — элемент people.
В конце корневой элемент добавляется в объект XDocument, и этот объект сохраняется на диске в xml-файл с помощью метода Save() .
Если мы откроем сохраненный файл people.xml , то увидим в нем следующее содержание:
Конструктор класса XElement позволяют задать набор объектов, которые будут входить в элемент. И предыдущий пример мы могли бы сократить следующим способом:
How can I build XML in C#?
It depends on the scenario. XmlSerializer is certainly one way and has the advantage of mapping directly to an object model. In .NET 3.5, XDocument , etc. are also very friendly. If the size is very large, then XmlWriter is your friend.
For an XDocument example:
Or the same with XmlDocument :
If you are writing a large stream of data, then any of the DOM approaches (such as XmlDocument / XDocument , etc.) will quickly take a lot of memory. So if you are writing a 100 MB XML file from CSV, you might consider XmlWriter ; this is more primitive (a write-once firehose), but very efficient (imagine a big loop here):
Finally, via XmlSerializer :
This is a nice model for mapping to classes, etc.; however, it might be overkill if you are doing something simple (or if the desired XML doesn’t really have a direct correlation to the object model). Another issue with XmlSerializer is that it doesn’t like to serialize immutable types : everything must have a public getter and setter (unless you do it all yourself by implementing IXmlSerializable , in which case you haven’t gained much by using XmlSerializer ).
Конструируем XML с использованием LINQ to XML API
XmlAttribute departmentIdAttribute = document.CreateAttribute( Nodes .DepartmentId);
departmentIdAttribute.InnerText = «D939743F-BFF7-41E4-9A1B-1193EEFF0486» ;
groupElement.Attributes.Append(departmentIdAttribute);
// Create elements.
XmlElement nameElement = document.CreateElement( Nodes .Name);
nameElement.InnerText = «555A» ;
groupElement.AppendChild(nameElement);
XmlElement courseElement = document.CreateElement( Nodes .Course);
courseElement.InnerText = «5» ;
groupElement.AppendChild(courseElement);
Согласитесь со мной, что писать, разбирать и сопровождать такой код — не очень приятно.
По данному коду невозможно получить представления о результирующей структуре XML. С каждым элементом или атрибутом необходимо всегда выполнить три шага: создать, задать свойство InnerText и добавить к уже существующему элементу или документу. Так же, без создания XmlDocument’а невозможно просто создать элемент, а ведь это необходимо достаточно часто.
Благо компания Microsoft подарила нам не просто возможность выполнения интегрированных запросов LINQ to XML, но и переработала XML DOM API.
Об этом я и хочу сегодня поведать подробнее. Для этого понадобиться подключить следующие пространства имен:
Как я уже говорил, одним из недостатков стандартной DOM модели было трудночитаемая структура получаемого XML файла. LINQ to XML API решает эту проблему, предлагая новую технику, называемую функциональным конструированием. Функциональное конструирование позволяет конструировать объекты XML и инициализировать их значения — одновременно, в единственном операторе, за счет множества перегруженных конструкторов.
Давайте посмотрим как будет выглядеть конструирование уже известного нам XML файла при помощи LINQ to XML API:
Ну как? Какой код вам легче читать? Ответ очевидный.
Объектная модель
Классы XObject, XNode и XContainer – являются абстрактными, так что создавать мы их не можем.
Класс XAttribute – не наследуется от XNode, т.е. не является узлом, это простой элемент коллекции, который представляет пару «ключ-значение».
Классы XDocument и XElement – единственные, которые могут содержать узлы, унаследованные от XNode.
XDocument
Получим пустой результат.
Сам по себе XDocument не имеет ничего полезного, только возможность добавить к документу объявление (XDeclaration), создание типа (XDocumentType) либо инструкции обработки (XProcessingInstruction).
Имеет статические методы для чтения содержимого документов, с всевозможными вариантами перегрузок:
Такие же методы имеет и элемент (XElement).
Я использую XDocument только в том случае, если необходимо задать объявление для документа, которое содержит номер версии и кодировку.
XDeclaration
Данный код так же не выведет никаких строк, хотя если посмотреть отладчик, объявление все-таки добавилось:

Объявление будет видно, если использовать метод Save(), класса XDocument.
XElement
Наиболее часто используемый объект API.
Имеет множество конструкторов, рассмотрим два из них:
Первый конструктор – простейший случай, когда элемент не имеет дочерних элементов и мы задаем только его значение, второй конструктор – с заданием дочерних элементов, таких как элементы, атрибуты, инструкции обработки, комментарии (XComment) и т.д.
Создадим простейший элемент:
Как видите доступ к значению стал еще проще благодаря переопределенному явному приведению элементов, достаточно привести элемент к его исходному типу, для того чтобы посмотреть его значение. XElement переопределяет явное приведение для всех простейших типов. Теперь даже к свойству Value обращаться нет необходимости.
Вы спросите, конструктор требует XName, а я передаю ему строку? И я вам отвечу: строка неявно приводится к объекту XName. По сути, XName – это и есть строка, только с возможностью задания пространства имен (XNamespace).
Приведу более детальный пример с созданием XML из объектов:
public sealed class Teacher
<
public Guid Id;
public string FirstName;
public string LastName;
>
IEnumerable < Teacher > teachers = new []
<
new Teacher () < color="#2B91AF">Guid .NewGuid(), FirstName = «Василий» , LastName = «Иванович» >,
new Teacher () < color="#2B91AF">Guid .NewGuid(), FirstName = «Мария» , LastName = «Николаевна» >
>;
XElement elements = new XElement ( «Teachers» ,
teachers.Select(t => new XElement ( «Teacher» ,
new XAttribute ( «Id» , t.Id),
new XElement ( «FirstName» , t.FirstName),
new XElement ( «LastName» , t.LastName))));
XAttribute
XComment
Заключение
На данном этапе я хотел бы закончить. Да, я не рассмотрел на примерах использование инструкций обработки, создание типов документа и другие классы модели, но данных знаний будет достаточно для создания как простых так и сложных по структуре XML документов.
В следующей статье я планирую рассмотреть проход по содержимому XML документа.
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Создание и чтение XML-файла C#
В данном уроке будет рассмотрена работа с XML на языке C#, в частности, создание простого XML-файла и его чтение в Windows Forms и в консольном приложении Visual Studio.
Что такое XML?
XML — это так называемый язык разметки, который используется для представления иерархических данных и структиуривания передаваемой информации в удобной для программ, приложений и различных систем форме. XML универсален и не зависит от платформы, на которой используется. Как и у любого языка, у него есть свой собственный (но довольно несложный) синтаксис, представленный в основном в виде различных тегов. Внешне он несколько похож на язык гипертекстовой разметки HTML, но если HTML используется для разметки страниц и отображения данных на них, то XML используется для структурирования данных, их сортировки, фильтрации и т.п. Можно даже приписать XML к аналогу баз данных, который не требует СУБД. В особенности XML-файлы хороши в представлении древовидных (иерархических) БД с произвольной длинной ветвей. В большинстве современных реляционных БД реализация подобной структуры далеко не всегда бывает эффективной и удобной, в особенности, когда длина ветвей доходит до десятков элементов.
Ко всему прочему, XML-документ довольно легко создать, для этого не нужно иметь никаких особенных программ и специфического ПО. В самом простом случае можно обойтись даже стандартной программой «Блокнот». А при наличии Visual Studio, предпочтительнее воспользоваться им, так как работа с XML-файлами в нём очень удобна и проста. Кроме того, есть возможность заполнить XML-файл программно, используя, например, консольное приложение Visual Studio.
Как создать XML-файл в Visual Studio вручную
Для начала попробуем создать простенький XML-файл вручную в Visual Studio и в блокноте.
Чтобы создать пустой XML-документ в Visual Studio, следует в окне программы нажать вкладку «Файл», а затем выбрать строки «Создать» и «Файл», как показано на скриншоте:

Затем в появившемся окне следует выбрать «XML-файл» и нажать кнопку «Открыть».

Вот и всё, XML-документ создан. Изначально в нём записана лишь одна строка: