1

XMLスキーマは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="id" type="xs:long" />
</xs:schema>

適合性が検証されたXMLファイル:

<?xml version="1.0" ?>
<id>invalid_data</id>

XMLで動作し、適合性をテストする必要があるJavaコード:

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(false);
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
factory.setSchema(schemaFactory.newSchema(new File(xmlSchema)));
parser = factory.newSAXParser();
MySaxHandler handler = new MySaxHandler();
parser.parse(new File(xmlFile), handler);

このコードの呼び出し中に、NumberFormatExceptionがのcharactersメソッドでスローされますMySaxHandler。MySaxHandlerには、オーバーライドされたメソッドwarning、error、およびfatalErrorも含まれていますが、これらは実行されません。

このNumberFormatExceptionがスローされないようにします。スキーマに従ってデータ型を検証したい。どうすればいいのですか?

4

1 に答える 1

1

単純にタイミングの問題なのかな。スキーマ バリデーターは、要素の終了イベントに到達するまで要素のコンテンツをテストできませんが、要素の終了イベントに到達する前に、テキスト ノードが ContentHandler に報告されます。アプリケーションで例外をマスクして、検証エラーが少し後で報告されるかどうかを確認してください。

于 2012-09-10T07:36:25.147 に答える