XML模式中根元素定义错误。

4

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

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

据我所知,此架构在有效性方面是正确的,例如Excel可以轻松读取它。

然而,当我尝试使用MSXML(v3或v4或v6)根据此架构验证内容时,会出现上述错误。(我创建了XMLSchemaCache,并且当我将已加载的架构添加到其中时出现错误。)

从谷歌上了解到,MS XML引擎存在一个概念问题,不符合W3标准,必须使用不同的命名空间定义。然而,我无法找到更正确的定义,也找不到任何有关该问题的合理解释。我只能在论坛上找到许多没有答复的帖子。

请问能否有人友好地解释一下这个问题?

编辑

由于某种原因,尽管我已经循环使用版本3、4和6的项目引用,但始终使用的是版本3。强制切换到4/6就解决了问题。因此,v3无法解析架构,其他版本都可以。我相信现在可以关闭这个问题了。


我使用 xsd := CreateOleObject('Msxml2.DOMDocument.6.0') as IXMLDOMDocument2; 自己构建了 XSD 文档,然后当我尝试将其应用于 IXMLDOMDocument2 时,出现了这个错误。当我将 XSD 从字符串重新加载到自身中时:xsd.loadXML(xsd.xml); 错误消失了。我不知道可能出了什么问题。 - Paul
4个回答

7

好的,问题在于我一直在使用MSXML版本3,而没有意识到。版本4和6可以正常工作。

示例代码可以在这里找到。这里的人们并不是很有帮助


源代码已经失效,请尽可能粘贴新的代码。 - msysmilu
@msysmilu 七年前,仅提供链接的答案很常见。在许多09-10年的帖子中,您会发现这个问题和其他一些问题。虽然这里并不重要,但示例代码也是很重要的。 - GSerg

2

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

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

接着我们有MSXML的新特性msdn页面,确认了xsd只在4.0中引入。

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


0
我知道这是一个老问题...但我刚刚在尝试解决这个问题时发现,xmlns(命名空间)属性值不正确也可能导致错误。
例如,模式元素的开标签应该像这样:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

但是,如果你在值中有一个拼写错误,例如你漏掉了冒号:
<xsd:schema xmlns:xsd="http//www.w3.org/2001/XMLSchema">

你会收到“模式中根元素定义不正确”的错误。


0

有趣的是,MSXML版本6在XDR模式下仍会出现此错误,因为支持已被删除,正如我在这里所学到的那样,更多信息请参见这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接