我有一个存储过程,它从EAV数据库返回变量数据,并希望将数据导出为XML。
DataTable列:
group varchar
attribute varchar
value varchar
数据表示例:
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,我得到:
<Item>
<group>General</group>
<attribute>Name</attribute>
<value>Big Bird</value>
</Item>
<Item>
<group>BodyType</group>
<attribute>Color</attribute>
<value>Yellow</value>
</Item>
...
我目前正在运行时动态构建一个类型,并使用该类型进行反射和序列化。我认为必须有更好的方法。
编辑:DataTable.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;
}
答案 0 :(得分:1)
尝试使用DataTable.WriteXml(writer)方法,该方法提供了一种方法,将DataTable中的数据或数据和模式都写入Xml文档。
也许这段代码示例将帮助您了解如何使用此方法:
string xmlString = string.Empty;
using (TextWriter writer = new StringWriter())
{
table.WriteXml(writer);
xml = writer.ToString();
}
希望这对你有所帮助! :)
答案 1 :(得分:0)
您的数据结构以奇怪的方式建模。每一行代表一个普通数据库中的记录,因此XML将假定每一行都是它自己的项目。我会考虑你如何建模数据。
如果您必须以这种方式对其进行建模,则应将数据表序列化为对象并存储该对象的列表。这样您就可以告诉序列化如何制作XML文档。
查看使用属性来定义XML文档。与此链接一样How to add attributes for C# XML Serialization