使用选择进行 XSD 验证

  • 本文关键字:XSD 验证 选择 xml xsd
  • 更新时间 :
  • 英文 :


我有下面的XSD和XML。

XSD:

    <xs:choice  minOccurs="3" maxOccurs="100" >
    <xs:element name="noticeOfEligibilityHCC"  minOccurs="0" />
    <xs:element name="noticeOfEligibilitySNAP"  minOccurs="0" />
    <xs:element name="noticeOfEligibilityTANF"  minOccurs="0" />
    <xs:element name="displayNoticeAttachment" type="xs:string" minOccurs="1" />
    <xs:element name="additionalComments" type="xs:string" minOccurs="1" />
    <xs:element name="noticeOfEligibilityCCAP"  minOccurs="0" />
    <xs:element name="noticeOfEligibilityLIHEAP"  minOccurs="0" />
    <xs:element name="noticeOfEligibilityLIHEAPShare"  minOccurs="0" />
    <xs:element name="noticeOfEligibilityEmergencyLIHEAP"  minOccurs="0" />
    </xs:choice>

.XML:

<displayNoticeAttachment>N</displayNoticeAttachment>
<additionalComments></additionalComments>

在上面的 XSD displayNoticeAttachmentadditionalComments元素是必需的。

我想根据提到的 XSD 验证 XML。验证应该成功,如果任何元素与必需元素一起存在,否则它应该抛出验证错误。

根据我的 XSD,它在每种情况下都成功进行验证。你能纠正一下,我错在哪里。

在这里,您可以找到为什么 xsd 总是产生成功的验证的极好解释: 了解 xsd:choice 和 minOccurs

对您来说,可能的解决方案之一是:

<xs:sequence>
    <xs:element name="displayNoticeAttachment" type="xs:string" minOccurs="1" />
    <xs:element name="additionalComments" type="xs:string" minOccurs="1" />
    <xs:choice  minOccurs="3" maxOccurs="100" >
        <xs:element name="noticeOfEligibilityHCC"  minOccurs="0" />
        <xs:element name="noticeOfEligibilitySNAP"  minOccurs="0" />
        <xs:element name="noticeOfEligibilityTANF"  minOccurs="0" />
        <xs:element name="noticeOfEligibilityCCAP"  minOccurs="0" />
        <xs:element name="noticeOfEligibilityLIHEAP"  minOccurs="0" />
        <xs:element name="noticeOfEligibilityLIHEAPShare"  minOccurs="0" />
        <xs:element name="noticeOfEligibilityEmergencyLIHEAP"  minOccurs="0" />
    </xs:choice>
</xs:sequence>

这只是一个例子,考虑到对元素排序等没有特殊要求(请注意,minOccurs=3会传递空集,因为在您的示例中,您是在具有带有minOccurs=0的项目的元素中进行选择(。您可以自由地阐述最适合您的特定情况的架构。

最新更新