.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();
}
}