5

有没有办法避免或设置模式来显示更好的用户友好消息?

我正在解析字符串并使用 reg ex 来解释它们,但可能有更好的方法。

前任。

"cvc-complex-type.2.4.b: The content of element 'node' is not complete. One of '{\"\":offer,\"\":links}' is expected."

相反,我想要:

"The element 'node' is not complete. The child elements 'offer' and 'links' are expected."

同样,我通过创建一个额外的层来验证它解决了这个问题。但是当我必须使用带有模式验证的 XML 工具时,显示的是 crypt 消息。

谢谢

4

3 回答 3

3

从来没听说过。您可能必须创建一些自定义代码来调整您的错误消息。一种方法可能是定义一组正则表达式,它们可以提取验证器错误消息的相关部分,然后将它们重新插入到您自己的错误消息中。想到这样的事情(未优化,不处理一般情况等,但我想你会明白的):

String uglyMessage = "cvc-complex-type.2.4.b: The content of element 'node' is not complete. One of '{\"\":offer,\"\":links}' is expected.";

String findRegex = "cvc-complex-type\\.2\\.4\\.b: The content of element '(\\w+)' is not complete\\. One of '\\{\"\":(\\w+),\"\":(\\w+)}' is expected\\.";

String replaceRegex = "The element '$1' is not complete. The child elements '$2' and '$3' are expected.";

String userFriendlyMessage = Pattern.compile(findRegex).matcher(uglyMessage).replaceAll(replaceRegex);

System.out.println(userFriendlyMessage);
// OUTPUT:
//   The element 'node' is not complete. The child elements 'offer' and 'links' are expected.

我怀疑这些验证器错误消息是特定于供应商的,因此如果您无法控制已部署应用程序中的 XML 验证器,这可能对您不起作用。

于 2009-09-28T20:58:37.323 回答
1

如果他发送给我们的 XML 错误,我们使用Schematron向用户显示友好的错误消息。我们当前的实现有点简单,特别是在以下几点:

  • 错误消息文本已编码为 schematron 规则
  • 对于每个新的 XML 类型(即新的 XSD 模式),都需要手动添加 schematron 规则

但是,通过以下返工可以轻松解决此问题:

  • Schematron 规则应包含唯一的错误消息代码,而实际消息文本选择(包括 I18n 问题)应超出验证框架范围
  • 可以使用 XSD 到 Schematron 转换器从 XSD 模式生成基本规则(可在http://www.schematron.com/resources.html获得)
于 2012-04-18T13:51:55.920 回答
0

不久前我问了一个类似的问题。

我的结论是没有提供映射错误的方法,这是您需要自己做的事情。

希望有人能做得更好!

于 2009-09-28T19:41:49.903 回答