XMLをXSDに対して検証するJavaコードがあります。私はここで見つけたエラーハンドラの修正バージョンを使用しています: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);
}