Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用自动字段映射快速读取XML文件并保存到磁盘上的表_C#_Xml_Datatable - Fatal编程技术网

C# 使用自动字段映射快速读取XML文件并保存到磁盘上的表

C# 使用自动字段映射快速读取XML文件并保存到磁盘上的表,c#,xml,datatable,C#,Xml,Datatable,如何通过自动字段映射快速读取XML文件并保存到磁盘上的强类型表(MS Access或SQL server 2012) 想法/需求: 使用c#4.0和.NET 4.0以及SQL server 2012和MS Access 基于自动字段映射导入xml数据(字段名称和字段类型) 从XML到表。我有XSD。只需添加新行,无键匹配 可以在需要时覆盖字段和类型映射(尚未决定 是硬编码还是使用模板/映射文件,这样我就不会 (必须重新编译) 如果需要,我可以复制字段映射(1个xml字段到多个表) 字段) 代码/

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

想法/需求:

  • 使用c#4.0和.NET 4.0以及SQL server 2012和MS Access
  • 基于自动字段映射导入xml数据(字段名称和字段类型) 从XML到表。我有XSD。只需添加新行,无键匹配
  • 可以在需要时覆盖字段和类型映射(尚未决定 是硬编码还是使用模板/映射文件,这样我就不会 (必须重新编译)
  • 如果需要,我可以复制字段映射(1个xml字段到多个表) 字段)
  • 代码/设置的低可维护性比 导入/转换速度–如果需要,很高兴了解所有选项
  • 可以接受第三方解决方案
  • 此方法是否足够快,还是有更好的方法?

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

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

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


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

    如果您拥有xml文件中的xsd文件,您可能需要尝试xsd2code,这是一个codeplex项目。这使得代码中的类基于Xsd格式

    对我来说,这使我能够非常轻松地创建xml代码,几乎没有问题。当xml模式发生更改时,您可以只更新代码以生成新类


    非常好而且整洁,当然这是个人的偏好。

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

    对我来说,这使我能够非常轻松地创建xml代码,几乎没有问题。当xml模式发生更改时,您可以只更新代码以生成新类


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

    您有xml文件中的xsd文件吗?您有xml文件中的xsd文件吗?谢谢。我有VS2010,这会增加工作吗?我一直在从xsd.exe工具生成c#类。xsd2code为我提供了什么我在上面还没有的东西?它允许您将节点作为类进行编程。因此,您不再使用序列化程序等。这些都是为您完成的。举个简单的例子。这是免费软件,所以你可以玩,但不必付费;)@FlorisPrijit我想这正是我在VS 2010中所做的,没有这个插件。xsd.exe工具从xsd文件生成一个C#类,这样我就可以获得如下xml数据。。这是内置的。我看不出你告诉我的有什么不同。Xmlserializer使用基于xsd的c#类文件为我填充类。你是说这样做可以省去我调用序列化或反序列化的步骤?一行代码?它增加了比这更多的功能,最好的方法就是去网站亲自看看你认为该功能是否能解决你提到的5个想法/需求。这是我能帮你的最好的了。谢谢。我有VS2010,这会增加工作吗?我一直在从xsd.exe工具生成c#类。xsd2code为我提供了什么我在上面还没有的东西?它允许您将节点作为类进行编程。因此,您不再使用序列化程序等。这些都是为您完成的。举个简单的例子。这是免费软件,所以你可以玩,但不必付费;)@FlorisPrijit我想这正是我在VS 2010中所做的,没有这个插件。xsd.exe工具从xsd文件生成一个C#类,这样我就可以获得如下xml数据。。这是内置的。我看不出你告诉我的有什么不同。Xmlserializer使用基于xsd的c#类文件为我填充类。你是说这样做可以省去我调用序列化或反序列化的步骤?一行代码?它增加了比这更多的功能,最好的方法就是去网站亲自看看你认为该功能是否能解决你提到的5个想法/需求。这是我能帮你的最好的了。
    ser = new XmlSerializer(typeof(MyTypeData));
    MyTypeData data;
    using (XmlReader reader = XmlReader.Create(XMLFullPath))
    {
      data = (MyTypeData)ser.Deserialize(reader);
    }
    
    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;
    }