我有一个解组器和一个 MySchema.xsd 文件。
StreamSource sources = new StreamSource(getClass().getClassLoader().getResourceAsStream("/xmlValidation.xsd"));
SchemaFactory sf = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
unmarshaller.setSchema(sf.newSchema(sources));
并调用 unmarshaller.setEventHandler() 函数,以指定自定义验证事件处理程序,该处理程序基本上格式化错误提示字符串,方法是:
final String errorString = new String();
unmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent validationevent) {
if(validationevent.getSeverity()!= ValidationEvent.WARNING){
errorString.format( "Line:Col[" + validationevent.getLocator().getLineNumber()
+ ":" + validationevent.getLocator().getColumnNumber()
+ "]:" + validationevent.getMessage());
return false;
}
return true;
}
});
上面的代码似乎工作正常(当输入字符串被验证时我可以得到java对象。并且错误提示字符串被格式化为例外)
问题是,当输入的 xml 格式不正确时,它也会抛出 SaxParseException。
提前致谢。安德鲁