使用xs:pattern处理xs:simpleType的xml-data验证错误的最佳方法是什么?
e.g。对
进行验证<xs:simpleType name="IBANIdentifier">
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"/>
</xs:restriction>
</xs:simpleType>
会导致这个SaxParseException:
org.xml.sax.SAXParseException: cvc-pattern-valid: Value 'XXAA99999999999911' is
not facet-valid with respect to pattern '[a-zA-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}
for type 'IBANIdentifier'.
在我的DefaultHandler.error()中,如何访问
没有解析错误消息?
该例外不以结构化形式AFAIKS保存此信息。解析器有一些状态,但我找不到我需要的信息。
答案 0 :(得分:1)
您可以编写自己的错误处理程序并使用validator.setErrorHandler(new CollectingErrorHandler(errors, shouldConsiderWarningsAsErrors));
CollectingErrorHandler
现在可以访问所有验证错误。现在,没有用于报告这些错误的标准格式,并且可能会从解析器实现中更改。所以坚持使用一个解析器实现并使用正则表达式进行解析。
public final class CollectingErrorHandler implements ErrorHandler
{
private final List<SAXException> l;
private final boolean warningsAreErrors;
public CollectingErrorHandler(final List<SAXException> l, final boolean shouldConsiderWarningsAsErrors)
{
this.l = l;
warningsAreErrors = shouldConsiderWarningsAsErrors;
}
public void error(final SAXParseException e)
{
l.add(e);
}
public void fatalError(final SAXParseException e)
{
l.add(e);
}
public void warning(final SAXParseException e)
{
if (warningsAreErrors)
{
l.add(e);
}
}
}