对于单个元素的 XML 验证失败,如何只报告一个错误?

How do I report only one error for an XML validation failure of a single element?

我想知道如何在元素 XML 架构日期验证失败时 return 只显示一条错误消息。我的目标是保留 xs:date 提供的验证(例如 2015 年 2 月 29 日无效,因为 2015 年不是闰年),同时确保日期符合以下正则表达式的模式:

"\d{4}[-]\d{2}[-]\d{2}"

我在在线 XML 模式测试器中尝试了这个,我得到了预期的结果。整个架构如下:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
                        <xs:element name="tripDate">
                                                    <xs:simpleType>
                                                        <xs:restriction base="xs:date">
                                                            <xs:whiteSpace value="collapse"/>
                                                            <xs:pattern value="\d{4}[\-]\d{2}[\-]\d{2}"/>
                                                        </xs:restriction>
                                                    </xs:simpleType>
                                                </xs:element></xs:schema>

我使用的测试元素值(除其他外)是:

<tripDate>20115-02-20</tripDate>

当我在 http://www.freeformatter.com/xml-validator-xsd.html 将这些输入格式化程序时,我得到了以下输出:

    Cvc-pattern-valid: Value '20115-02-20' Is Not Facet-valid With Respect To Pattern '\d{4}[\-]\d{2}[\-]\d{2}' For Type '#AnonType_tripDate'.. Line '1', Column '33'.

    Cvc-type.3.1.3: The Value '20115-02-20' Of Element 'tripDate' Is Not Valid.. Line '1', Column '33'.

我的问题是,如何确保只有一个错误会被 returned?具体来说,我只希望 "Cvc-type" 错误被 returned,因为这是在模式无效的情况下出现的,即使日期本身是有效的。是否有任何类型的模式设置可以抑制 "Cvc-pattern-valid" 错误,或将错误折叠为父限制的错误,在本例中为 xs:date?我希望 "Cvc-type" 错误只被 returned,因为这是在应用程序的 Java 代码中处理的,我尽量不要不必要地添加 Java处理其他错误的代码(此时它抛出 SQL 异常错误)。

谢谢。

XSD/XML 级别没有任何东西可以控制验证时生成的错误消息的数量。

验证解析器的实现可能会提供一种机制,以便在遇到解析错误时调用用户代码。您提到了 Java,其中有一个 org.xml.sax.ErrorHandler interface and a org.xml.sax.helpers.DefaultHandler class 您应该会觉得有用。

另见 Java XML Parse/Validation Error Handling and Tip: Validation and the SAX ErrorHandler interface