0

我有一个来自第三方的 XSD,我试图用它在 SQL Server 中创建 XML 模式集合并验证从该第三方接收的 XML。

验证后,我收到一个错误:

XML 验证:无效的内容。预期元素:“元素 1”、“元素 2”。找到:元素 'element3' 代替。位置:/DOCUMENT[1]/ :reference_data[1]/ :element3[1]。

相关的 XSD 和 XML 对我来说看起来是正确的,但我无法确定为什么会发生此错误。这是相关的 XSD 修剪回相关元素(整个文档很大,所以我不会在这里发布):

<xs:element name="reference_data">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="element1" minOccurs="0" maxOccurs="256">
                <xs:complexType>
                    <xs:simpleContent>
                        ... some other stuff
                    </xs:simpleContent>
                </xs:complexType>
           </xs:element>
           <xs:element name="element2" minOccurs="0" maxOccurs="50">
               <xs:complexType>
                   <xs:simpleContent>
                       ... some other stuff
                   </xs:simpleContent>
               </xs:complexType>
           </xs:element>
           <xs:choice minOccurs="0" maxOccurs="1000">
               <xs:element name="element3" minOccurs="0" maxOccurs="1000">
               </xs:element>
           </xs:choice>
       </xs:sequence>
   </xs:complexType>
</xs:element>

以下是正在验证的相关 XML:

<reference_data>
    <element1>ABCD</element1>
    <element3>
        <associated_detail1>whatever</associated_detail1>
        <associated_detail2>whatever</associated_detail2>
    </element3>
</reference_data>

如您所见,element1 在那里,所以我不明白为什么它找到了 element3 而不是 element1。Element2 不存在,但它在 XSD 中也定义为minoccurs=0,那么为什么它是“预期的”?

4

1 回答 1

0

XSD 验证器发出不正确的验证错误是不常见的——尤其是当 XML 处理器是使用频率很高的处理器之一时(例如 Java VM 附带的处理器)。

但是,如果您的 XSD 和 XML 与发布的完全相同,那么我同意您的评估。在看到 的第一次出现后/reference_data/element1,允许的“下一个标签名称”集是 ( element1, element2, element3)。

Filburt 关于意外子元素的评论element3是正确的,但这应该会产生不同的 XSD 验证错误(与 的内容相关的错误element3

我建议您使用您发布的确切 XSD 和 XML 重新测试。

于 2021-02-28T00:08:07.673 回答