Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中格式化XML模式验证错误消息?_Java_Xml_Validation_Domparser_Saxparseexception - Fatal编程技术网

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

如何在Java中格式化XML模式验证错误消息?,java,xml,validation,domparser,saxparseexception,Java,Xml,Validation,Domparser,Saxparseexception,我希望在根据xml文件的模式验证xml文件时,以特定格式打印默认错误消息 我不希望在错误消息中包含架构错误代码。i、 e、cvc-complex-type-2-4-b、cvc-mininclusive-valid等 我不希望在错误消息中打印名称空间。e、 g,应为“{”“:schema_version}”之一。 注意-XML和XSD使用名称空间 比如说, 默认错误消息: cvc复杂类型.2.4.a:发现以元素“report\u version”开头的内容无效。应为“{”“:schema\u ve

我希望在根据xml文件的模式验证xml文件时,以特定格式打印默认错误消息

  • 我不希望在错误消息中包含架构错误代码。i、 e、cvc-complex-type-2-4-b、cvc-mininclusive-valid等

  • 我不希望在错误消息中打印名称空间。e、 g,应为“{”“:schema_version}”之一。 注意-XML和XSD使用名称空间

  • 比如说,

    默认错误消息:

    cvc复杂类型.2.4.a:发现以元素“report\u version”开头的内容无效。应为“{”“:schema\u version}”之一

    预期的错误消息:

    “发现以元素“report\u version”开头的内容无效。应为“{schema\u version}”之一。”

    代码:

    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()返回一个字符串(可能为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());
    

    希望这有帮助,请随意提问。

    我认为不可能覆盖Expception本身(除了可能从它派生并以某种方式覆盖throw函数,但是哼哼…)。因为getMessage()返回一个字符串(可能为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());
    

    希望这有帮助,请随意提问。

    您是使用特定的实现还是希望它可移植?@SpaceTrucker-我不需要它可移植。您是使用特定的实现还是希望它可移植?@SpaceTrucker-我不需要它可移植。问题是并非所有的错误消息都有架构错误代码(即cvc复合型。2.4.a:等)在前面。有些消息前面没有错误代码,但可能包含冒号作为异常消息的一部分。因此,我需要知道第一个冒号之前的文本是错误代码,只有这样我才能截断错误代码前缀并格式化消息。你能在GH或其他内容上共享你的项目吗?因为它非常复杂那么,是帮助:)还是正在运行的摘录?问题是,并非所有错误消息的前面都有架构错误代码(即cvc复杂类型.2.4.a:等)。有些消息前面没有错误代码,但可能包含冒号作为异常消息的一部分。因此,我需要知道第一个冒号前的文本是错误代码,只有这样我才能截断错误代码前缀并格式化消息。你能在GH或其他网站上共享你的项目吗?因为这比帮助更容易:)或是一篇跑步摘录?