使用在C#.net 4中的多个XSD文件中定义的复杂类型从XSD创建DataTable

时间:2011-07-19 20:41:55

标签: c# .net xsd

我有一堆来自https://github.com/XeroAPI/XeroAPI-Schemas/tree/master/v2.00

的XSD

我需要做两件事:

  1. 为每种类型创建表格,我的第一个表格是Contact.xsd中的联系人。
  2. 当填充表格时,我需要将XML从表格中取出,以便将其作为REST请求发送。
  3. 我无法超越第1项:(

    我已将所有这些XSD标记为我的.net C#项目中的嵌入资源

    然后我使用反射来使用DataSet.ReadXmlSchema(ContactXsdStream)加载XSD,但是这个XSD引用BaseTypes.xsd中指定的类型并且它抛出错误“Undefined complexType'DataContractBase'用作复杂类型的基础扩展名为”

    var assembly = Assembly.GetExecutingAssembly();
    var dataset = new DataSet();
    var manifestResourceStream = assembly.GetManifestResourceStream(schemaName);
    if (manifestResourceStream == null)
      throw new FileNotFoundException(string.Format("Unable to find schema resource {0}", schemaName));
    
    using (var textStreamReader = new StreamReader(manifestResourceStream))
    {
      dataset.ReadXmlSchema(textStreamReader);
      textStreamReader.Close();
    }
    return dataset;
    

    感谢所有帮助

    其他注意事项

    据我所知,没有联系复杂类型没有直接映射到单个表,但是我可能需要将复杂类型(如Address)作为XML字符串嵌入数据表中。

    我需要简单类型的原因是DataTables被传递给数据同步API(Simego DataSync Studio)。这个同步工具允许我双向同步到CRM,SharePoint,Excel和其他数据源。如果更适合任何其他建议,我将使用其他同步框架。

    亲切的问候 硅

1 个答案:

答案 0 :(得分:1)

当您的Xsd包含其他Xsd文件时,文件必须存在于磁盘上的正确位置。

即使从资源中获取主xsd并将其作为流或简单字符串传递给ReadXmlSchema,所包含的模式也必须作为相对于当前工作目录的指定位置的文件存在。