gpt4 book ai didi

c# - 通过导入将嵌入式 XSD 加载到数据集中

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:53 25 4
gpt4 key购买 nike

我的目标是将带有导入的嵌入式 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 解析器的 XmlReaderSettings,但是当我将此 XmlReader 传递给 DataSet.ReadXmlSchema 方法时,它也找不到导入的架构文件。我在重载的 GetEntity 方法中设置了一个断点,它永远不会被击中。所以 XmlReader 似乎没有使用我提供的 XmlResolver。我对 XmlTextReader 也有同样的问题。

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

最佳答案

很遗憾,不可以,无法从作为资源嵌入的多个 XSD 加载数据集。

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

internal void ReadXSDSchema(XmlReader reader, bool denyResolving)

代码在那里的编写方式,它利用了 XmlSchemaSet ;它使用您传递的阅读器 (XmlReader) 加载架构,将其添加到 XmlSchemaSet 并编译。

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com