c# - 将嵌入式 XSD 导入到 DataSet 中

标签 c# xsd dataset import

我的目标是将嵌入的 xsd 加载到数据集中,然后基于 xsd 生成表。

我正在尝试加载包含多个导入的 XSD 文件的 XML 架构的数据集。对文件系统上的文件执行此操作没有问题,我只需将主 xsd 文件交给它,一切都会正常加载,并且所有 xsd 导入都已解决。我想做的是将我的 xsd 嵌入到我的 dll 中,这样它就不会坐在文件系统上。具有嵌入式 xsd 文件的项目与将访问 xsd 文件以加载到数据集中的项目是分开的。

DataSet.ReadXmlSchema 方法可以采用流、XmlReader、字符串 uri 或 XmlTextReader。我加载 dll 并使用 assembly.GetManifestResourceStream(schemaPath) 访问主架构文件没有问题,如果我的架构只是一个文件,那就没问题了。问题是,一旦我将其传递给 DataSet.ReadXmlSchema 方法,它就无法找到任何导入。

我尝试使用 XmlReader 并将 XmlReaderSettings 对象与我为之前的问题编写的自定义 xml 解析器一起使用(并且我知道有效)。我过去曾使用自定义 xml 解析器将嵌入 dll 中的类似架构加载到 XmlSchemaSet 中,它的工作方式非常神奇。因此,当我进行 XmlReader.Create 调用时,我传入使用自定义 Xml Resolver 的 XmlReaderSettings,但是当我将此 XmlReader 传递给 DataSet.ReadXmlSchema 方法时,它也找不到导入的架构文件。我在重载的 GetEntity 方法中设置了一个断点,但它从未被命中。所以XmlReader似乎没有使用我提供的XmlResolver。我对 XmlTextReader 也有同样的问题。

关于如何将嵌入模式加载到数据集中,有什么想法吗?我的最后一招是将嵌入的 xsd 文件临时复制到文件系统以创建数据集,然后删除它们,尽管我试图避免这种情况。

最佳答案

不幸的是,不,无法从作为资源嵌入的多个 XSD 加载数据集。

理由就在 DataSet 类的这个方法中:

内部 void ReadXSDSchema(XmlReader reader, bool denyResolving)

代码的编写方式是使用 XmlSchemaSet ;它使用您传递的读取器 (XmlReader) 来加载架构,将其添加到 XmlSchemaSet 并编译。

不幸的是,要在使用嵌入式资源时编译 XmlSchemaSet,必须为 XmlSchemaSet 对象提供一个 xml 解析器!...问题是,没有一个可以用于此目的过程中的点。虽然读取器设置可以使用解析器进行配置,但如您所知,它是只写的(没有 getter)。

为了测试我所说的内容,请尝试从相同的嵌入式资源加载 XmlSchemaSet;您会注意到,无论您尝试什么,解析器都必须设置在 XmlSchemaset 级别,而不是 XmlReader 级别。

我建议你看一下异常堆栈,然后使用Reflector或者类似的东西看代码。如果您得出不同的结论,请分享。

关于c# - 将嵌入式 XSD 导入到 DataSet 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9724043/

相关文章:

java - 用于更改类名称的 Jaxb 绑定(bind)不起作用

c# - 如何使用 TableAdapter 进行更新?

c# - Windows窗体与远程服务器之间如何实现实时数据同步

c# - 按文化排序未按预期工作

xml - RelaxNG 与 XML 架构

web-services - 将 xsd 导入 wsdl

Python 相当于 MATLAB 的数据集数组

c# - 在运行时更改数据集连接字符串 vs2010

c# - 避免项目之间双向通信的循环引用

c# - 根据 WebMethod 中提供的条件从 WebMethod 返回值