Создание XML с помощью c#

402
17 июня 2017, 11:03

Здравствуйте. Мне нужно создать xml-файл по средствам языка c#. Вот мой код создания xml-файла.

String str = "D:\\file.xml";
XmlTextWriter textWritter = new XmlTextWriter(str, Encoding.UTF8);
textWritter.Formatting = Formatting.Indented;
textWritter.WriteStartDocument();
textWritter.WriteStartElement("NAME");
textWritter.WriteString(TextBox1.Text);
textWritter.WriteEndElement();
textWritter.Close();

Но мне нужно создать несколько тегов на одном уровне. Так как каждый будет отвечать за 1 поле. Как в моём случае NAME. Но создать несколько тегов старт элементом оказалось нельзя. Как можно сделать то же самое только с несколькими полями. Вот как выглядит сейчас мой xml-файл.

А нужно что бы выглядел примерно вот так:

То есть мне нужны поля на 1 уровне в xml. Как это можно реализовать? Если можно в примере покажите мой код с исправлениями которые мне нужно сделать.

Answer 1

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

XML Validator

Еще один способ создания xml - использовать Linq2Xml.

Если взять класс из ответа @AGS17 :

public class Person
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int Age { get; set; }
}

то метод для получения xml будет следующим

public static XElement CreateXML(Person person)
{
    return new XElement(
        "person",
            new XElement("Name", person.Name),
            new XElement("Surname", person.Surname),
            new XElement("Age", person.Age));
}

Пример использования

var xml = CreateXML(new Person { Name = "Сергей", Age = 30, Surname = "Петров" });
xml.Save(path);

В результате будет получен такой xml

<?xml version="1.0" encoding="utf-8"?>
<person>
  <Name>Сергей</Name>
  <Surname>Петров</Surname>
  <Age>30</Age>
</person>
Answer 2

Как насчет использовать прелести XmlSerializer?

Опишите вашу модель:

public class Person
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int Age { get; set; }
}

И после серилизуйте ее:

var xmlSerializer = new XmlSerializer(typeof(Person));
var stringWriter = new StringWriter();
xmlSerializer.Serialize(stringWriter, person); 
string xml = stringWriter.ToString();

Проверить!

READ ALSO
Выделение строки в подстроке WPF

Выделение строки в подстроке WPF

Допустим есть datagridВ нем есть некоторое ключевое поле, по которому я делаю фильтрацию, считайте поиск

316
Объект Slider в WPF и его элемент управления Thumb?

Объект Slider в WPF и его элемент управления Thumb?

Всем привет, сейчас пытаюсь разобраться с элементами wpf , и у меня возник вопрос по компоненту slider - на msdn написано, что

336
Зачем включают несколько тегов &lt;script&gt;&lt;/script&gt;? Область видимости же одна и та же

Зачем включают несколько тегов <script></script>? Область видимости же одна и та же

Такой подход можно увидеть на многих сайтахЭто просто для удобства?

267
Убрать css атрибут по id jquery

Убрать css атрибут по id jquery

Добрый деньХочу убрать атрибут со стилей Вот так выглядит css в style

313