将动态数据表转换为XML
本文关键字:XML 转换 数据表 动态 | 更新日期: 2023-09-27 18:18:00
我有一个存储过程,它从EAV数据库返回变量数据,并希望将数据导出为XML。
DataTable columns:
group varchar
attribute varchar
value varchar
Datatable的例子:
group attribute value
General Name Big Bird
BodyType Color Yellow
BodyType Height 200
General Age 5
所需XML: <RootTag>
<General>
<Name>Big Bird</Name>
<Age>5</Age>
</General
<BodyType>
<Color>Yellow</Color>
<Height>200</Height>
</BodyType>
</RootTag>
如果我做一个DataTable。WriteXml I get:
<Item>
<group>General</group>
<attribute>Name</attribute>
<value>Big Bird</value>
</Item>
<Item>
<group>BodyType</group>
<attribute>Color</attribute>
<value>Yellow</value>
</Item>
...
我目前正在用反射动态地在运行时构建一个类型,并使用该类型进行序列化。我在想一定有更好的办法。
编辑:数据表。WriteXml样本即可
public static string BuildFullXML(DataTable OrderData, string OutPath)
{
if (!Directory.Exists(OutPath)) { Directory.CreateDirectory(OutPath); }
OutPath += DateTime.Now.Ticks + ".xml";
OrderData.TableName = "Item";
using (TextWriter TW = File.CreateText(OutPath))
{
OrderData.WriteXml(TW);
TW.Close();
}
return path;
}
尝试使用DataTable. writexml (writer)方法,该方法提供了一种将数据或数据和模式从DataTable写入Xml文档的方法。
也许这个代码示例将帮助您理解如何使用这个方法:
string xmlString = string.Empty;
using (TextWriter writer = new StringWriter())
{
table.WriteXml(writer);
xml = writer.ToString();
}
希望这对你有帮助!:)
您的数据结构以一种奇怪的方式建模。每行表示普通数据库中的一条记录,因此XML将假定每行是它自己的项。我会考虑如何对数据建模。
如果你必须这样建模,你应该序列化你的数据表到一个对象,并存储该对象的列表。这样就可以告诉序列化器如何制作XML文档。
考虑使用属性来定义XML文档。如何为c# XML序列化添加属性