有一个模式包含以下枯燥的根元素:
<?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无法解析模式,其他人也没问题。我相信现在可以关闭了。
答案 0 :(得分:5)
答案 1 :(得分:1)
补充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:Why Version-Independent GUIDs and ProgIDs Were Removed上有这样的文章。所以我认为我们应该坚持6.0。
答案 2 :(得分:0)
答案 3 :(得分:0)
我知道这是一个老问题......但我刚刚尝试解决这个问题,xmlns(名称空间)属性值不正确也会导致错误。
例如,schema元素的开始标记应如下所示:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
但是,如果您的值中有拼写错误,例如你错过了冒号:
<xsd:schema xmlns:xsd="http//www.w3.org/2001/XMLSchema">
您将收到“架构中根元素的错误定义”错误。