java - 如何在 Java 中格式化 XML 模式验证错误消息?

标签 java xml validation domparser saxparseexception

我希望在根据其模式验证 xml 文件时打印的默认错误消息设置为特定格式。

  1. 我不希望错误消息中包含架构错误代码。即 cvc-complex-type-2-4-b、cvc-mininclusive-valid 等,

  2. 我不希望在错误消息中打印命名空间。例如,预期为 '{"http://sample.org/xml_schema ":schema_version}' 之一。 注意 - XML 和 XSD 使用命名空间。

例如,

默认错误消息:

"cvc-complex-type.2.4.a: Invalid content was found starting with element 'report_version'. One of '{"http://sample.org/xml_schema":schema_version}' is expected."

预期错误消息:

"Invalid content was found starting with element 'report_version'. One of '{schema_version}' is expected."

代码:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);

try {
    SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema    = sf.newSchema(ClassLoader.getSystemResource("sample_schema.xsd"));
    factory.setSchema(schema);

    DocumentBuilder builder  = factory.newDocumentBuilder();
    builder.setErrorHandler(new ErrorHandler() {

            @Override
            public void warning(SAXParseException exception) {
                System.out.println(exception.getMessage());
            }

            @Override
            public void fatalError(SAXParseException exception) throws SAXException {
                System.out.println(exception.getMessage());
            }

            @Override
            public void error(SAXParseException exception) {
                System.out.println(exception.getMessage());
            }
        });

    doc   = builder.parse(inputSource);
} catch(Exception e) {

}

请告诉我是否有办法实现这一目标。

最佳答案

我认为不可能重写 Expception 本身(除了可能从它派生并以某种方式重写 throw 函数,但是嗯......)。因为 getMessage() 返回一个 String(可能为 null?),所以你可以在打印之前尝试自己格式化它。

有两个':',所以你可以把第一个':'前面的所有内容都剪掉,也可以将“”:之间的所有内容扔进垃圾箱,就你发布的消息而言。记住这一点,我不确定所有 SaxParseException 是否都像这样,您应该尝试一下。

想法集:

StringBuilder b = exception.getMessage();
b.delete(0, b.indexOf(":"));
b.replace(b.indexOf("{"), b.indexOf("":"), "{"); (you maybe must excape the " with \)
System.out.println(b.toString());

希望这对您有所帮助,请随时询问。

关于java - 如何在 Java 中格式化 XML 模式验证错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261011/

相关文章:

java - 如何从shell内的Linux命令获取字符串或值到JAVA?

java - JLine 库回显

xml - 从负载平衡服务器下载 Word 文档后 session 详细信息丢失

sql-server - 验证 SQL Server 存储过程中的日期参数

java - 日期检查循环?

java - 谁能解释一下这里发生了什么 : "protected" modifier in java

java - 在 Maven 插件中调用 MavenCli 失败

android - 删除安卓 : prefix for every attribute

android - XML 中查看动画的引用自定义插值器

php - Laravel 自定义验证消息参数