gpt4 book ai didi

java - 如何分解 SaxParseException (cvc-pattern-valid)?

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:22 24 4
gpt4 key购买 nike

针对带有 xs:pattern 的 xs:simpleType 处理 xml-data 验证错误的最佳方法是什么?

例如验证针对

<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() 中,如何访问

  • 图案
  • 实际值
  • 简单类型的名称

不解析错误消息?

据我所知,该异常并不以结构化形式保存此信息。解析器有一些状态,但我找不到我需要的信息。

最佳答案

您可以通过编写自己的错误处理程序并使用 validator.setErrorHandler(new CollectingErrorHandler(errors, shouldConsiderWarningsAsErrors)); 向 validator 注册来捕获所有验证错误/警告;

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);
}
}
}

关于java - 如何分解 SaxParseException (cvc-pattern-valid)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com