将动态DataTable转换为XML

时间:2016-11-15 21:33:21

标签: c# xml datatable

我有一个存储过程,它从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;
}

2 个答案:

答案 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