在使用IXMLDOMDocument2(C ++)时验证xml文档时出现以下错误:
提供的命名空间“http://www.somesite.com/schema/2.0”与架构的targetNamespace“http://www.somesite.com/schema/2.0/SomeObject”不同。
我正在尝试验证的Xml是:
<id:envelope xmlns:id="http://www.somesite.com/schema/2.0/SomeObject"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.somesite.com/schema/2.0 SomeObject.xsd">
<!-- content -->
</id:envelope>
现在我可以看到xsi:schemaLocation标签看起来像空格一样(“http://www.somesite.com/schema/2.0 SomeObject.xsd”似乎被解释为“http://www.somesite.com/schema/2.0”),但我仍然不明白最新情况,因为这似乎表明schemaLoaction需要与指定的xmlns完全匹配......
答案 0 :(得分:1)
schemaLocation包含一种将架构映射到可以找到架构表示的位置的方法
在这种情况下,schemaLocation应该包含一对字符串
The schema name - exactly matching the namespace id given
Where it is found in this case a relative file SomeObject.xsd
定义见W3C schema spec见4.3.2节中的例子
所以更正的版本可能是 xsi:schemaLocation =“http://www.somesite.com/schema/2.0/SomeObject http://www.somesite.com/schema/2.0SomeObject.xsd”
答案 1 :(得分:0)
我不知道您正在使用的实际解析器,但由于架构位置是URL并且不允许URL包含空格,因此解析器可能只是吐出不正确的错误消息。尝试对schmea位置进行适当的URL编码,看看是否有帮助: