Reputation: 158
I generate a xml file using some database informations that get displayed in a dataGridView but I don't know how to get the xml syntax I want.
What I have is like :
<Orders>
<NewOrders>
<Order>
<OrderNbr>xxxxxxx</OrderNbr>
<Amount>xxx</Amount>
</Order>
</NewOrders>
</Orders>
<Orders>
<NewOrders>
<Order>
<OrderNbr>yyyyyy</OrderNbr>
<Amount>yyy</Amount>
</Order>
</NewOrders>
</Orders>
And I'd want :
<Orders>
<NewOrders>
<Order>
<OrderNbr>xxxxxxx</OrderNbr>
<Amount>xxx</Amount>
</Order>
<Order>
<OrderNbr>yyyyyy</OrderNbr>
<Amount>yyy</Amount>
</Order>
</NewOrders>
</Orders>
I generate the xml file like so :
private void buttonXML_Click(object sender, EventArgs e)
{
if (dataGridView1.Rows.Count > 0)
{
if (!(File.Exists(path)))
{
TextWriter tw = new StreamWriter(path);
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
tw.WriteLine(
new XElement("Orders",
new XElement("NewOrders",
new XElement("Order",
new XElement("OrderNbr", dataGridView1.Rows[i].Cells[3].Value),
new XElement("Amount", Convert.ToInt32(dataGridView1.Rows[i].Cells[5].Value)),
)
)
)
);
}
tw.Close();
}
}
}
I tried using a StringBuilder but didn't manage to achieve what I want.
Upvotes: 0
Views: 55
Reputation: 2559
I think that this will do what you're looking for:
var xElement = new XElement("Orders",
new XElement("NewOrders")
);
for (int i = 0; i < 2; i++)
{
xElement
.Elements()
.FirstOrDefault(e => e.Name == "NewOrders")
.Add(
new XElement("Order",
new XElement("OrderNumber", "ABC"),
new XElement("Amount", 5.55)
)
);
}
Upvotes: 2