0

複数のXSDスキーマに対してxmlインスタンスを検証しています。検証が失敗した場合、xmlインスタンスが失敗したスキーマを特定したいと思います。には、SAXParseExceptionこれを判断するための十分な情報が含まれていません。

SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Source[] sources = getXsdSources();
Schema schema = factory.newSchema(sources);
Validator validator = schema.newValidator();

try {
  validator.validate(input);
} catch (SAXParseException e) {
  // Error handling.
}
4

3 に答える 3

0

@ジョー、次のリンクが役立つかもしれません。以前にStackoverflowで尋ねられた同じ質問を見つけることができます。 複数のスキーマ定義に対してXMLファイルを検証する

于 2012-10-26T16:19:45.670 に答える
0

すべてのスキーマを「スキーマ」にロードするのではなく、各スキーマを個別に検証する必要があります。次に、「ソース」のリストを繰り返して「バリデーター」を設定するだけなので、障害時にロードされたものを追跡できます。

これはテストされていませんが、ほぼ正しいはずです。

SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    Source[] sources = getXsdSources();
    foreach( Source s : sources){
    Schema schema = factory.newSchema(s);
    Validator validator = schema.newValidator();
    try {
      validator.validate(input);
    } catch (SAXParseException e) {
      // Error handling.
      System.out.println("failed on " + s.getSystemID)
    }
}
于 2012-10-26T16:23:36.973 に答える
0

Xerces Jは、スキーマ後検証情報セット(PSVI)のすべて(またはおそらくほとんどすべて?)へのアクセスを提供します。これには、要素または属性が検証されたタイプと無効性の性質に関する情報が含まれます。詳細については、http: //xerces.apache.org/xerces2-j/faq-xs.html#faq-8を参照してください。

使用しているバリデーターがXercesJの場合、必要な情報が利用可能です(おそらく、処理しているSAXParseExceptionによってラップされた例外で?)。別のバリデーターを使用している場合は、そのAPIをもう少し詳しく調べるか、XercesJを使用できます。

于 2012-10-27T21:38:00.013 に答える