我有一些Java代碼驗證XML對XSD。我正在使用此處找到的錯誤處理程序的修改版本:http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html在驗證時捕獲並記錄所有異常。翻譯SAX異常
的錯誤是非常簡潔的,他們是這個樣子:
如http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:attributes&{"http://www.myschema.com/schema":sequence}
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:cID&{"http://www.myschema.com/schema":txn}
其他消息更加神祕。
是否有一種簡單的方法可以從SAX獲得清晰明瞭的信息,從而解釋此處出錯?我想在第一個錯誤,它期待txn
,而不是發現元素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);
}