@vladimirchelyabinskiy

C# как добавлять несколько элементов с параметрами в созданный XML документ?

Задача следующая, при нажатии кнопки "Создать" создаётся XML документ с 1 элементом ("Text" и его атрибутами) при нажатии кнопки "Еще" поля Textbox очищаются.....
....
и тут мне нужно добавить уже в созданный документ еще элементы "Text" с другими атрибутами, например еще штук 6.

Подскажите как это сделать? желательно готовый пример!!!

namespace XMLs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e) // Кнопка создать
        {
            // Создаём документ XML
            XDocument doc = new XDocument(new XDeclaration("1.0", "windows-1251", null));
            
            // Создаем элемент "File"
            XElement el_file = new XElement("File");

            // Добавляем необходимые атрибуты
            el_file.Add(new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"));
            el_file.Add(new XAttribute("id", 1));
            el_file.Add(new XAttribute("version", "2.0"));
            doc.Add(el_file);

            // Создаем элемент "Document"
            XElement el_doc = new XElement("Document");

            // Добавляем необходимые атрибуты
            el_doc.Add(new XAttribute("DocId", 11512));
            el_doc.Add(new XAttribute("Date", "12.07.15"));


            // создаём элемент "Text"
            XElement el_svnp = new XElement("Text");

            // Добавляем необходимые атрибуты
            el_svnp.Add(new XAttribute("a", textBox1.Text));
            el_svnp.Add(new XAttribute("b", textBox2.Text));
            el_doc.Add(el_svnp);

            doc.Root.Add(el_doc);
            doc.Save("_s.temp");
        }

        private void button2_Click(object sender, EventArgs e) // Кнопка "Еще"
        {
            textBox1.Text = null;
            textBox2.Text = null;
        }

    }
}
  • Вопрос задан
  • 963 просмотра
Решения вопроса 1
@rare
Вам нужно вынести xdocument в переменную класса, а в обработчике проверять, если документ null, то создать, если не null, то найти элемент Text и добавить новые узлы после него.

public partial class Form1 : Form
{
    private readonly XDocument _xml;
    public Form1()
    {
        InitializeComponent();
        _xml = CreateNewXml();
    }

    private void button1_Click(object sender, EventArgs e) 
    {        
        var docNode = _xml.Root.Element("Document");
        var lastTextNode = docNode.Elements("Text").LastOrDefault();
        var textNode = CreateNewTextNode();
        if (lastTextNode != null)
            lastTextNode.AddAfterSelf(textNode);
        else
            docNode.Add(textNode);
        
        _xml.Save("_s.temp");
    }

    private XDocument CreateNewXml()
    {
        var doc = new XDocument(new XDeclaration("1.0", "windows-1251", null));
        var fileNode = new XElement("File");
        fileNode.Add(new XAttribute(XNamespace.Xmlns + "xsi", 
            "http://www.w3.org/2001/XMLSchema-instance"));
        fileNode.Add(new XAttribute("id", 1),
            new XAttribute("version", "2.0"));            
        XElement docNode = new XElement("Document");
        docNode.Add(new XAttribute("DocId", 11512),
            new XAttribute("Date", "12.07.15"));

        fileNode.Add(docNode);
        doc.Add(fileNode);

        return doc;
    }

    private XElement CreateNewTextNode()
    {
        XElement textNode = new XElement("Text");
        textNode.Add(
            new XAttribute("a", textBox1.Text),
            new XAttribute("b", textBox2.Text));            
        return textNode;
    }

    private void button2_Click(object sender, EventArgs e) 
    {
        textBox1.Text = null;
        textBox2.Text = null;
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы