对于单个元素的 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。
我想知道如何在元素 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。