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

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

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

Доброго всем времени суток, Вот моя проблема, написана программа по примеру, она добавляет/редактирует/удаляет строки в XML в общем она работает, но создает данные не в том формате, что мне надо т.е Мне нужно так
Листинг программы
  1. <comp_it_xml>
  2. <entry
  3. icon="matt"
  4. title="Тестовый товар 1"
  5. description="Мини описание"
  6. fulldescription="Полное описание"
  7. price="150"/>
  8. ....
  9. </comp_it_xml>
Но создает так
Листинг программы
  1. <comp_it_xml>
  2. <entry>
  3. <icon>matt.png</icon>
  4. <title>Test 3</title>
  5. <description>dfgdg dfz gfdz dg</description>
  6. <fulldescription> fdgr dfgghghgfhdg h dfg fgs fgs fgs fgs f </fulldescription>
  7. <price>130</price>
  8. </entry>
  9. ....
  10. </comp_it_xml>
вот код
Листинг программы
  1. public partial class Form1 : Form
  2. {
  3. public static string conf;
  4. public Form1()
  5. {
  6. InitializeComponent();
  7. CIASystem.config();
  8. CIASystem conf = new Core.CIASystem();
  9. }
  10. private void Form1_Load(object sender, EventArgs e)
  11. {
  12.  
  13. // label
  14. lb_icon.Text = "Иконка";
  15. lb_title.Text = "Название";
  16. lb_description.Text = "Описание";
  17. lb_fulldescription.Text = "Полное описание";
  18. lb_price.Text = "Цена";
  19. // button
  20. btn_addProduct.Text = "Добавить продукт";
  21. btn_editProduct.Text = "Редактировать продукт";
  22. btn_delProduct.Text = "Удалить продукт";
  23. btn_saveAsXml.Text = "Сохранить как XML";
  24. btn_clearTable.Text = "Очистить столбцы";
  25. btn_downXml.Text = "Загрузить XML";
  26. }
  27. private void btn_addProduct_Click(object sender, EventArgs e)
  28. {
  29. if (tb_icon.Text == "")
  30. {
  31. MessageBox.Show("Заполните все поля.", "Ошибка.");
  32. }
  33. else
  34. {
  35. int n = dg_listProduct.Rows.Add();
  36. dg_listProduct.Rows[n].Cells[0].Value = tb_icon.Text;
  37. dg_listProduct.Rows[n].Cells[1].Value = tb_title.Text;
  38. dg_listProduct.Rows[n].Cells[2].Value = tb_description.Text;
  39. dg_listProduct.Rows[n].Cells[3].Value = tb_fulldescription.Text;
  40. dg_listProduct.Rows[n].Cells[4].Value = tb_price.Text;
  41. }
  42. }
  43. private void btn_editProduct_Click(object sender, EventArgs e)
  44. {
  45. if (dg_listProduct.SelectedRows.Count > 0)
  46. {
  47. int n = dg_listProduct.SelectedRows[0].Index;
  48. dg_listProduct.Rows[n].Cells[0].Value = tb_icon.Text;
  49. dg_listProduct.Rows[n].Cells[1].Value = tb_title.Text;
  50. dg_listProduct.Rows[n].Cells[2].Value = tb_description.Text;
  51. dg_listProduct.Rows[n].Cells[3].Value = tb_fulldescription.Text;
  52. dg_listProduct.Rows[n].Cells[4].Value = tb_price.Text;
  53. }
  54. else
  55. {
  56. MessageBox.Show("Выберите строку для редактирования.", "Ошибка.");
  57. }
  58. }
  59. private void btn_delProduct_Click(object sender, EventArgs e)
  60. {
  61. if (dg_listProduct.SelectedRows.Count > 0)
  62. {
  63. dg_listProduct.Rows.RemoveAt(dg_listProduct.SelectedRows[0].Index);
  64. }
  65. else
  66. {
  67. MessageBox.Show("Выберите строку для удаления.", "Ошибка.");
  68. }
  69. }
  70. private void btn_clearTable_Click(object sender, EventArgs e)
  71. {
  72. if (dg_listProduct.Rows.Count > 0)
  73. {
  74. dg_listProduct.Rows.Clear();
  75. }
  76. else
  77. {
  78. MessageBox.Show("Таблица пустая.", "Ошибка.");
  79. }
  80. }
  81. private void btn_downXml_Click(object sender, EventArgs e)
  82. {
  83. if (dg_listProduct.Rows.Count > 0) //если в таблице больше нуля строк
  84. {
  85. MessageBox.Show("Очистите поле перед загрузкой нового файла.", "Ошибка.");
  86. }
  87. else
  88. {
  89. if (File.Exists("comp_it_xml.xml")) // если существует данный файл
  90. {
  91. DataSet ds = new DataSet(); // создаем новый пустой кэш данных
  92. ds.ReadXml("comp_it_xml.xml"); // записываем в него XML-данные из файла
  93. foreach (DataRow item in ds.Tables["entry"].Rows)
  94. {
  95. int n = dg_listProduct.Rows.Add(); // добавляем новую сроку в dataGridView1
  96. dg_listProduct.Rows[n].Cells[0].Value = item["icon"]; // заносим в первый столбец созданной строки данные из первого столбца таблицы ds.
  97. dg_listProduct.Rows[n].Cells[1].Value = item["title"]; // то же самое со вторым столбцом
  98. dg_listProduct.Rows[n].Cells[2].Value = item["description"]; // то же самое с третьим столбцом
  99. dg_listProduct.Rows[n].Cells[3].Value = item["fulldescription"]; // то же самое с третьим столбцом
  100. dg_listProduct.Rows[n].Cells[4].Value = item["price"]; // то же самое с третьим столбцом
  101. }
  102. }
  103. else
  104. {
  105. MessageBox.Show("XML файл не найден.", "Ошибка.");
  106. }
  107. }
  108. }
  109. private void btn_saveAsXml_Click(object sender, EventArgs e)
  110. {
  111. try
  112. {
  113. DataSet ds = new DataSet("comp_it_xml"); // создаем пока что пустой кэш данных
  114. DataTable dt = new DataTable(); // создаем пока что пустую таблицу данных
  115. dt.TableName = "entry"; // название таблицы
  116. dt.Columns.Add("icon"); // название колонок
  117. dt.Columns.Add("title");
  118. dt.Columns.Add("description");
  119. dt.Columns.Add("fulldescription");
  120. dt.Columns.Add("price");
  121. ds.Tables.Add(dt); //в ds создается таблица, с названием и колонками, созданными выше
  122. foreach (DataGridViewRow r in dg_listProduct.Rows) // пока в dataGridView1 есть строки
  123. {
  124. DataRow row = ds.Tables["entry"].NewRow(); // создаем новую строку в таблице, занесенной в ds
  125. row["icon"] = r.Cells[0].Value; //в столбец этой строки заносим данные из первого столбца dataGridView1
  126. row["title"] = r.Cells[1].Value; // то же самое со вторыми столбцами
  127. row["description"] = r.Cells[2].Value; //то же самое с третьими столбцами
  128. row["fulldescription"] = r.Cells[3].Value; //то же самое с третьими столбцами
  129. row["price"] = r.Cells[4].Value; //то же самое с третьими столбцами
  130. ds.Tables["entry"].Rows.Add(row); //добавление всей этой строки в таблицу ds.
  131. }
  132. ds.WriteXml("comp_it_xml.xml");
  133. MessageBox.Show("XML файл успешно сохранен.", "Выполнено.");
  134. }
  135. catch
  136. {
  137. MessageBox.Show("Невозможно сохранить XML файл.", "Ошибка.");
  138. }
  139. }
  140. private void dg_listProduct_MouseClick(object sender, MouseEventArgs e)
  141. {
  142. try
  143. {
  144. tb_icon.Text = dg_listProduct.SelectedRows[0].Cells[0].Value.ToString();
  145. //int n = Convert.ToInt32(dg_listProduct.SelectedRows[0].Cells[1].Value);
  146. //numericUpDown1.Value = n;
  147. tb_title.Text = dg_listProduct.SelectedRows[0].Cells[1].Value.ToString();
  148. tb_description.Text = dg_listProduct.SelectedRows[0].Cells[2].Value.ToString();
  149. tb_fulldescription.Text = dg_listProduct.SelectedRows[0].Cells[3].Value.ToString();
  150. tb_price.Text = dg_listProduct.SelectedRows[0].Cells[4].Value.ToString();
  151. }
  152. catch
  153. {
  154. //MessageBox.Show("Невозможно сохранить XML файл.", "Ошибка.");
  155. toolStripStatusLabel1.Text = "Ошибка. - Невозможно открыть XML файл.";
  156. }
  157. }
  158. private void btn_uploadToFtp_Click(object sender, EventArgs e)
  159. {
  160. }
  161. }
  162. }

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

textual
Листинг программы
  1. void Main()
  2. {
  3.     var set = new DataSet();
  4.     set.ReadXml(new XmlTextReader(new StringReader(db)));
  5.    
  6.     set.WriteXml(new MyXml(Console.Out));
  7. }
  8.  
  9. string db = @"<?xml version=""1.0"" standalone=""yes""?>
  10. <comp_it_xml>
  11.  <entry icon=""matt.png"" title=""Test 3"" description=""dfgdg dfz gfdz dg"" fulldescription="" fdgr dfgghghgfhdg h dfg fgs fgs fgs fgs f "" price=""130"" />
  12.  <entry icon=""matt.png"" title=""Test 3"" description=""dfgdg dfz gfdz dg"" fulldescription="" fdgr dfgghghgfhdg h dfg fgs fgs fgs fgs f "" price=""130"" />
  13.  <entry icon=""matt.png"" title=""Test 3"" description=""ggjyjg fhh"" fulldescription="" fdgr dfgghghgfhdg h dfg fgs fgs fgs fgs f "" price=""132"" />
  14. </comp_it_xml>
  15. ";
  16.  
  17. class MyXml : XmlTextWriter
  18. {
  19.     TextWriter writer;
  20.    
  21.     public MyXml(TextWriter writer):
  22.         base(writer)
  23.     {
  24.         this.writer = writer;
  25.     }
  26.    
  27.     public override void WriteStartAttribute(string prefix, string localName, string ns)
  28.     {
  29.         writer.Write("\n");
  30.         base.WriteStartAttribute(prefix, localName, ns);
  31.     }
  32.    
  33.     public override void WriteStartElement(string prefix, string localName, string ns)
  34.     {
  35.         writer.Write("\n");
  36.         base.WriteStartElement(prefix, localName, ns);
  37.     }
  38.    
  39.     public override void WriteEndElement()
  40.     {
  41.         writer.Write("\n");
  42.         base.WriteEndElement();
  43.     }
  44. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут