4

有一个带有以下无聊根元素的模式:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

就我而言,该模式是有效的,例如,Excel 读取它没有问题。

但是,当我尝试使用 MSXML(v3 或 v4 或 v6)针对此架构验证内容时,我得到了主题错误。(我创建了 XMLSchemaCache,当我将加载的模式添加到它时发生错误。)

从 Google 我了解到 MS XML 引擎不符合 W3 标准存在概念问题,必须使用不同的命名空间定义。但是,我既找不到更正确的定义,也找不到对问题的任何体面的解释。我只能在论坛上找到很多没有回复的帖子。

谁能更深入地解释一下这个问题?

编辑

出于某种原因,尽管我通过版本 3、4 和 6 循环了项目引用,但始终使用版本 3。强制切换到 4/6 解决了它。所以 v3 无法解析模式,其他都很好。我相信现在可以关闭。

4

4 回答 4

7

好的,问题是我在没有意识到的情况下使用了 MSXML 版本 3。版本 4 和 6 工作正常。

示例代码可以在这里找到。这里的人并不太乐于助人。

于 2010-01-14T15:01:37.380 回答
2

为了补充 GSerg 的自动回答(顺便说一句很有帮助),我添加了一些源信息。首先,我们在wiki中得到明确的解释:

不同版本的 MSXML 支持的功能集略有不同。例如,虽然 MSXML 3.0 仅支持 XDR 架构,但它不支持 XSD 架构。MSXML 4.0、MSXML 5.0 和 MSXML 6.0 支持 XSD 架构。但是,MSXML 6.0 不支持 XDR 架构

然后我们有What's New in MSXML msdn 页面,确认仅在 4.0 中引入 xsd。

最后,作为一般建议,我们在 msdn 上有这样一篇文章:为什么删除了与版本无关的 GUID 和 ProgID。所以我认为我们应该坚持使用 6.0。

于 2012-10-25T16:22:09.683 回答
0

有趣的是,MSXML 版本 6 仍然在 XDR 架构上引发此错误,因为对它的支持已被删除,正如我在这里学到的,更多信息在这里

于 2012-05-04T09:29:16.877 回答
0

我知道这是一个老问题......但我只是在尝试解决这个问题时发现 xmlns(命名空间)属性值不正确也会导致错误。

例如,架构元素的开始标签应该是这样的:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

但是,如果您在值中有错字,例如您缺少冒号:

<xsd:schema xmlns:xsd="http//www.w3.org/2001/XMLSchema">

您将收到“架构中根元素的定义不正确”错误。

于 2012-10-24T16:23:52.423 回答