.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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д