.NET 4.x Добавление данных в XML не верно - C#

Узнай цену своей работы

Формулировка задачи:

Доброго всем времени суток, Вот моя проблема, написана программа по примеру, она добавляет/редактирует/удаляет строки в XML в общем она работает, но создает данные не в том формате, что мне надо т.е Мне нужно так
<comp_it_xml>
<entry 
icon="matt"
title="Тестовый товар 1" 
description="Мини описание" 
fulldescription="Полное описание"
price="150"/>
....
</comp_it_xml>
Но создает так
<comp_it_xml>
  <entry>
    <icon>matt.png</icon>
    <title>Test 3</title>
    <description>dfgdg dfz gfdz dg</description>
    <fulldescription> fdgr dfgghghgfhdg h dfg fgs fgs fgs fgs f </fulldescription>
    <price>130</price>
  </entry>
....
</comp_it_xml>
вот код
public partial class Form1 : Form
    {
        public static string conf;
        public Form1()
        {
            InitializeComponent();
 
            CIASystem.config();
            CIASystem conf = new Core.CIASystem();
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {

            // label
            lb_icon.Text = "Иконка";
            lb_title.Text = "Название";
            lb_description.Text = "Описание";
            lb_fulldescription.Text = "Полное описание";
            lb_price.Text = "Цена";
 
            // button
            btn_addProduct.Text = "Добавить продукт";
            btn_editProduct.Text = "Редактировать продукт";
            btn_delProduct.Text = "Удалить продукт";
            btn_saveAsXml.Text = "Сохранить как XML";
            btn_clearTable.Text = "Очистить столбцы";
            btn_downXml.Text = "Загрузить XML";
        }
 
        private void btn_addProduct_Click(object sender, EventArgs e)
        {
            if (tb_icon.Text == "")
            {
                MessageBox.Show("Заполните все поля.", "Ошибка.");
            }
            else
            {
                int n = dg_listProduct.Rows.Add();
                dg_listProduct.Rows[n].Cells[0].Value = tb_icon.Text;
                dg_listProduct.Rows[n].Cells[1].Value = tb_title.Text;
                dg_listProduct.Rows[n].Cells[2].Value = tb_description.Text;
                dg_listProduct.Rows[n].Cells[3].Value = tb_fulldescription.Text;
                dg_listProduct.Rows[n].Cells[4].Value = tb_price.Text;
            }
        }
 
        private void btn_editProduct_Click(object sender, EventArgs e)
        {
            if (dg_listProduct.SelectedRows.Count > 0)
            {
                int n = dg_listProduct.SelectedRows[0].Index;
                dg_listProduct.Rows[n].Cells[0].Value = tb_icon.Text;
                dg_listProduct.Rows[n].Cells[1].Value = tb_title.Text;
                dg_listProduct.Rows[n].Cells[2].Value = tb_description.Text;
                dg_listProduct.Rows[n].Cells[3].Value = tb_fulldescription.Text;
                dg_listProduct.Rows[n].Cells[4].Value = tb_price.Text;
            }
            else
            {
                MessageBox.Show("Выберите строку для редактирования.", "Ошибка.");
            }
        }
 
        private void btn_delProduct_Click(object sender, EventArgs e)
        {
            if (dg_listProduct.SelectedRows.Count > 0)
            {
                dg_listProduct.Rows.RemoveAt(dg_listProduct.SelectedRows[0].Index);
            }
            else
            {
                MessageBox.Show("Выберите строку для удаления.", "Ошибка.");
            }
        }
 
        private void btn_clearTable_Click(object sender, EventArgs e)
        {
            if (dg_listProduct.Rows.Count > 0)
            {
                dg_listProduct.Rows.Clear();
            }
            else
            {
                MessageBox.Show("Таблица пустая.", "Ошибка.");
            }
        }
 
        private void btn_downXml_Click(object sender, EventArgs e)
        {
            if (dg_listProduct.Rows.Count > 0) //если в таблице больше нуля строк
            {
                MessageBox.Show("Очистите поле перед загрузкой нового файла.", "Ошибка.");
            }
            else
            {
                if (File.Exists("comp_it_xml.xml")) // если существует данный файл
                {
                    DataSet ds = new DataSet(); // создаем новый пустой кэш данных
                    ds.ReadXml("comp_it_xml.xml"); // записываем в него XML-данные из файла
 
                    foreach (DataRow item in ds.Tables["entry"].Rows)
                    {
                        int n = dg_listProduct.Rows.Add(); // добавляем новую сроку в dataGridView1
                        dg_listProduct.Rows[n].Cells[0].Value = item["icon"]; // заносим в первый столбец созданной строки данные из первого столбца таблицы ds.
                        dg_listProduct.Rows[n].Cells[1].Value = item["title"]; // то же самое со вторым столбцом
                        dg_listProduct.Rows[n].Cells[2].Value = item["description"]; // то же самое с третьим столбцом
                        dg_listProduct.Rows[n].Cells[3].Value = item["fulldescription"]; // то же самое с третьим столбцом
                        dg_listProduct.Rows[n].Cells[4].Value = item["price"]; // то же самое с третьим столбцом
                    }
                }
                else
                {
                    MessageBox.Show("XML файл не найден.", "Ошибка.");
                }
            }
        }
 
        private void btn_saveAsXml_Click(object sender, EventArgs e)
        {
            try
            {
                DataSet ds = new DataSet("comp_it_xml"); // создаем пока что пустой кэш данных
                DataTable dt = new DataTable(); // создаем пока что пустую таблицу данных
                dt.TableName = "entry"; // название таблицы
                dt.Columns.Add("icon"); // название колонок
                dt.Columns.Add("title");
                dt.Columns.Add("description");
                dt.Columns.Add("fulldescription");
                dt.Columns.Add("price");
                ds.Tables.Add(dt); //в ds создается таблица, с названием и колонками, созданными выше
 
                foreach (DataGridViewRow r in dg_listProduct.Rows) // пока в dataGridView1 есть строки
                {
                    DataRow row = ds.Tables["entry"].NewRow(); // создаем новую строку в таблице, занесенной в ds
                    row["icon"] = r.Cells[0].Value;  //в столбец этой строки заносим данные из первого столбца dataGridView1
                    row["title"] = r.Cells[1].Value; // то же самое со вторыми столбцами
                    row["description"] = r.Cells[2].Value; //то же самое с третьими столбцами
                    row["fulldescription"] = r.Cells[3].Value; //то же самое с третьими столбцами
                    row["price"] = r.Cells[4].Value; //то же самое с третьими столбцами
                    ds.Tables["entry"].Rows.Add(row); //добавление всей этой строки в таблицу ds.
                }
                ds.WriteXml("comp_it_xml.xml");
                MessageBox.Show("XML файл успешно сохранен.", "Выполнено.");
            }
            catch
            {
                MessageBox.Show("Невозможно сохранить XML файл.", "Ошибка.");
            }
        }
 
        private void dg_listProduct_MouseClick(object sender, MouseEventArgs e)
        {
            try
            { 
            tb_icon.Text = dg_listProduct.SelectedRows[0].Cells[0].Value.ToString();
            //int n = Convert.ToInt32(dg_listProduct.SelectedRows[0].Cells[1].Value);
            //numericUpDown1.Value = n;
            tb_title.Text = dg_listProduct.SelectedRows[0].Cells[1].Value.ToString();
            tb_description.Text = dg_listProduct.SelectedRows[0].Cells[2].Value.ToString();
            tb_fulldescription.Text = dg_listProduct.SelectedRows[0].Cells[3].Value.ToString();
            tb_price.Text = dg_listProduct.SelectedRows[0].Cells[4].Value.ToString();
            }
            catch
            {
                //MessageBox.Show("Невозможно сохранить XML файл.", "Ошибка.");
                toolStripStatusLabel1.Text = "Ошибка. - Невозможно открыть XML файл.";
            }
        }
 
        private void btn_uploadToFtp_Click(object sender, EventArgs e)
        {
 
        }
    }
}

Решение задачи: «.NET 4.x Добавление данных в XML не верно»

textual
Листинг программы
void Main()
{
    var set = new DataSet();
    set.ReadXml(new XmlTextReader(new StringReader(db)));
    
    set.WriteXml(new MyXml(Console.Out));
}
 
string db = @"<?xml version=""1.0"" standalone=""yes""?>
<comp_it_xml>
  <entry icon=""matt.png"" title=""Test 3"" description=""dfgdg dfz gfdz dg"" fulldescription="" fdgr dfgghghgfhdg h dfg fgs fgs fgs fgs f "" price=""130"" />
  <entry icon=""matt.png"" title=""Test 3"" description=""dfgdg dfz gfdz dg"" fulldescription="" fdgr dfgghghgfhdg h dfg fgs fgs fgs fgs f "" price=""130"" />
  <entry icon=""matt.png"" title=""Test 3"" description=""ggjyjg fhh"" fulldescription="" fdgr dfgghghgfhdg h dfg fgs fgs fgs fgs f "" price=""132"" />
</comp_it_xml>
";
 
class MyXml : XmlTextWriter
{
    TextWriter writer;
    
    public MyXml(TextWriter writer):
        base(writer)
    {
        this.writer = writer;
    }
    
    public override void WriteStartAttribute(string prefix, string localName, string ns)
    {
        writer.Write("\n");
        base.WriteStartAttribute(prefix, localName, ns);
    }
    
    public override void WriteStartElement(string prefix, string localName, string ns)
    {
        writer.Write("\n");
        base.WriteStartElement(prefix, localName, ns);
    }
    
    public override void WriteEndElement()
    {
        writer.Write("\n");
        base.WriteEndElement();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5