【问题标题】:Convert dynamic DataTable to XML将动态数据表转换为 XML
【发布时间】:2016-11-15 21:33:21
【问题描述】:

我有一个存储过程,它从 EAV 数据库返回可变数据,并希望将数据导出为 XML。

数据表列:

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;
}

【问题讨论】:

    标签: c# xml datatable


    【解决方案1】:

    尝试使用 DataTable.WriteXml(writer) 方法,该方法提供了一种将 DataTable 中的数据或数据和模式都写入 Xml 文档的方法。

    也许这个代码示例会帮助你理解如何使用这个方法:

        string xmlString = string.Empty;
        using (TextWriter writer = new StringWriter())
        {
                table.WriteXml(writer);
                xml = writer.ToString();
        }  
    

    希望这对您有所帮助! :)

    【讨论】:

    • 您可能错过了最后我已经尝试过 DataTable.WriteXML 并且输出不是所需格式的部分。请扩展您的答案以包含有关如何使用 WriteXML 函数更改输出以匹配所需输出示例的信息。
    • 你能写一个代码块让我检查你在哪里写错了吗?也许我会看到问题。谢谢!
    • 我添加了方法。
    • 查看此链接,因为它可能对您有所帮助 --> link 但我认为问题出在 TextWriter TW = File.CreateText(OutPath)
    【解决方案2】:

    您的数据结构以一种奇怪的方式建模。每行代表普通数据库中的一条记录,因此 XML 将假定每一行都是它自己的项目。我会考虑您如何对数据进行建模。

    如果您必须以这种方式对其建模,您应该将数据表序列化为一个对象并存储该对象的列表。这样您就可以告诉序列化如何制作您的 XML 文档。

    研究使用属性来定义您的 XML 文档。喜欢这个链接How to add attributes for C# XML Serialization

    【讨论】:

    • 数据的结构是这样的,因为它是来自 EAV 数据库的变量。我不知道每个项目存在哪些属性,人们想要的信息会随着时间的推移而变化。这样做可以节省大量代码更改时间。当需要不同的数据时,会在 EAV 结构中创建一个新属性,并自动以 XML 格式输出并供各种 XML 接收者使用。无需对代码进行任何更改。
    • 抱歉,我错过了你提到它是 EAV 的部分
    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2019-08-03
    • 1970-01-01
    • 2017-02-19
    相关资源
    最近更新 更多