I have to create a very specific shape XML file dynamically within C# to power a flash object on a website. The problem I have faced with many of my attempts is that most output wants each node to have some way of unique identification, I do not want that. Rather the below is the output I am going after, not the output I currently can get. Note it is also invalid XML.
<data>
<Annual Enrollment>
<row>
<column>value1</column>
<column>value2</column>
<column>value3</column>
</row>
<row>
<column>value1</column>
<column>value2</column>
<column>value3</column>
</row>
</Annual Enrollment>
<Pre-College>
<row>
<column>value1</column>
<column>value2</column>
<column>value3</column>
</row>
<row>
<column>value1</column>
<column>value2</column>
<column>value3</column>
</row>
</Pre-College>
….AND so forth. The node titles or and cannot change, nor can the roots for each tree.
The code I have so far looks like this, in my head it seems like it should work, however it does not.
var tableResult = DashboardData.GetMetricData(1);
// Outlinining structure
XDocument document = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement("data",
new XElement("AnnualEnrollment"),
new XElement("Pre-College"),
new XElement("Summary")
));
// Now I need to append children to each of the three nodes within the root "data"
foreach (DataRow row in tableResult.Tables[0].Rows)
{
document.Element("AnnualEnrollment").Add(new XElement("row"));
foreach (var item in row.ItemArray)
{
var element = new XElement("column", item);
}
}
Sample below reads rows from first table and converts them to row elements, providing as content columns values converted to column elements.
Also I’d extracted DataTable conversion into separate (extension) method:
Now your Xml generation will look like: