【问题标题】:Quickly read XML files and save to tables on disk with auto field mapping使用自动字段映射快速读取 XML 文件并保存到磁盘上的表中
【发布时间】:2012-12-20 16:00:29
【问题描述】:

如何使用自动字段映射(MS Access 或 SQL server 2012)快速读取 XML 文件并保存到磁盘上的强类型表。

想法/想要:

  1. 使用 c# 4.0 和 .NET 4.0 以及 SQL server 2012 和 MS Access
  2. 基于自动字段映射(字段名称和字段类型)导入xml数据 从 XML 到表。我有 XSD。只需添加新行,没有键匹配。
  3. 可以根据需要覆盖字段和类型映射(尚未决定 是硬编码还是使用模板/映射文件,所以我不 必须重新编译)
  4. 如果需要,我可以复制字段映射(1 个 xml 字段到多个表 字段)
  5. 代码/设置的低可维护性比 导入/转换速度——但如果需要,很高兴知道所有选项
  6. 第三方解决方案可能是可以接受的

这种方法够快还是有更好的方法?

第1步:将xml读入一个类(c#类是从XSD.exe工具自动生成的)

ser = new XmlSerializer(typeof(MyTypeData));
MyTypeData data;
using (XmlReader reader = XmlReader.Create(XMLFullPath))
{
  data = (MyTypeData)ser.Deserialize(reader);
}

第 2 步:以某种方式使用泛型将类保存到强类型 DataSet DataTable(内存表)中(如下面的方法)

public static DataTable CreateEmptyDataTable(MyTypeData data)
// Creates empty DataTable
{
    DataTable dt = new DataTable();

    foreach (PropertyInfo info in data.GetProperties())
    {
        dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));   
    }

    return dt;
}

步骤 3:在磁盘上填充表,其中 DataTable 字段名称与字段类型相同的 XML 名称相同。跳过不在表中的 xml 元素名称。只需添加新行,暂时不用担心键匹配。以后可以添加基于键匹配的更新行。

第 4 步:将自定义源添加到 dest 字段映射:(如何 - 最好的方法是什么?)

【问题讨论】:

  • 你有 xml 文件中的 xsd 文件吗?

标签: c# xml datatable


【解决方案1】:

如果您有来自 xml 文件的 xsd 文件,您可能想尝试 xsd2code,它是一个 codeplex 项目。 See here。这使得代码中的类基于 Xsd 格式。

对我来说,这让我可以非常轻松地创建 xml 代码,而且问题很少。当 xml 方案更改时,您只需更新代码即可生成新类。

非常漂亮和整洁,不过,这当然是个人喜好。

【讨论】:

  • 谢谢。我有 VS 2010,那个插件可以工作吗?我一直在从 xsd.exe 工具生成 c# 类。 xsd2code 给了我什么是我在上面没有的?
  • 它允许您将节点作为类进行编程。因此,您不再使用序列化程序等。这一切都是为您完成的。举一个简单的例子。它是免费软件,因此您可以玩但不必付费;)
  • @FlorisPrijit 我认为这正是我在没有该插件的情况下在 VS 2010 中所做的。 xsd.exe 工具从 XSD 文件生成一个 C# 类,因此我可以像这样获取 xml 数据。 .。这是内置的。我看不出你告诉我的有什么不同。 Xmlserializer 使用基于 xsd 的 c# 类文件为我填充类。你是说它只是节省了我调用序列化或反序列化的步骤吗?一行代码?
  • 它添加的功能远不止这些,最好的方法就是去网站看看你是否认为该功能可以解决你提到的这 5 个想法/希望。这是我能帮你的最好的。
猜你喜欢
  • 2010-10-26
  • 2016-07-22
  • 2014-05-02
  • 2015-10-23
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多