第三方接口提供的XML没有<xml>
标记且没有名称空间引用。关联的XSD文件在xmlns
上指定了targetNamespace
和schema
,这显然不在XML中。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="cheese"
targetNamespace="cheese"
elementFormDefault="qualified">
<xsd:element name = "Something>
...
</xsd:element>
</xsd:schema>
<Something>
...
</Something>
我无法更改XML,但我可以破解我的XSD本地副本。是最好的&#39;选项只是为了删除问题属性还是有更简洁的解决方案?
答案 0 :(得分:1)
修改标准模式的本地副本的能力确实是部分XSD设计的激励因素之一。
但是如果我理解正确的话,你就会消耗由XML提供的XML,这个XML为XML提供XSD架构,但是发布不符合架构的XML,可能只是因为提供了一个微不足道的错误。 XML中的默认名称空间声明。在其他条件相同的情况下,我认为从长远来看,最好的解决方案是告知XML这一差异的来源。如果他们足够关心文档来提供模式,那么组织中可能还有人也看到了验证点。当然,没有任何保证,但你要做的就是让世界变得更美好。
与此同时:是的,模式的本地修改副本,或者使用预处理器将XML包装在表单的虚拟包装元素中
<dummy xmlns="cheese">
... existing XML goes here, minus XML declaration if any ...
</dummy>