将动态数据表转换为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;
}

将动态数据表转换为XML

尝试使用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序列化添加属性