我有一些 Java 代码可以针对 XSD 验证 XML。我正在使用此处找到的错误处理程序的修改版本:http ://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html在验证时捕获并记录所有异常。
错误非常简洁,它们看起来像这样:
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:cID&{"http://www.myschema.com/schema":txn}
其他消息,例如
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:attributes&{"http://www.myschema.com/schema":sequence}
更加神秘。
有没有一种简单的方法可以从 SAX 中获得清晰易懂的信息来解释这里出了什么问题?我认为在第一个错误中它是预期txn
的,而是找到了 element cID
。但是...我不知道 SAX 可能生成的所有可能错误,所以我宁愿不尝试手动创建转换表。
此输出的最终用户大多是非技术人员,因此我需要能够生成简单明了的消息,例如“元素txn
乱序”。
如果有帮助,这里是用于验证的代码(或多或少):
Source schema1 = new StreamSource(new File("resources/schema1.xsd"));
Source schema2 = new StreamSource(new File("resources/schema2.xsd"));
Source[] sources = {schema1,schema2};
validator = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(sources).newValidator();
ErrorHandler lenient = new ForgivingErrorHandler();
validator.setErrorHandler(lenient);
别处...
StreamSource xmlSource = new StreamSource(new StringReader(XMLData) );
try
{
validator.validate(xmlSource);
}
catch (SAXException e)
{
logger.error("XML Validation Error: ",e);
}