我希望在根据其模式验证 xml 文件时打印的默认错误消息设置为特定格式。
我不希望错误消息中包含架构错误代码。即 cvc-complex-type-2-4-b、cvc-mininclusive-valid 等,
我不希望在错误消息中打印命名空间。例如,预期为 '{"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/