使用选择进行XSD验证

时间:2018-03-13 17:55:40

标签: 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,它在每种情况下都能成功验证。 你能纠正,我错了。

1 个答案:

答案 0 :(得分:0)

在这里,您可以找到很好的解释,为什么您的xsd始终生成成功的验证:Understanding xsd:choice and 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)。您可以自由地详细说明最适合您特定情况的架构。