2009-10-27 9 views
5

SAXParserまたはXMLReaderを使用してxmlファイルを解析し、特定のxsd ファイルnew File("example.xsd"))に準拠していることを確認します。サックスパーサーでxsdファイルを解析する際にxsdファイルを検証する方法は?

それは簡単です

  1. this SO answerValidator等を用いて、余分なステップでXSDファイルに対して検証を行います。

  2. xsdの名前を"http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"のように指定して解析すると、this SO answerのように検証することができます。

しかしを解析中に、私はnew File("example.xsd")に対して検証することができますか?

SchemaFactory schemaFactory = SchemaFactory 
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
Schema schema = schemaFactory.newSchema(new File("myschema.xsd")); 
SAXParserFactory saxFactory = SAXParserFactory.newInstance(); 
saxFactory.setSchema(schema); 
SAXParser parser = saxFactory.newSAXParser(); 
parser.parse("data.xml", new DefaultHandler() { 
    // TODO: other handler methods 
    @Override 
    public void error(SAXParseException e) throws SAXException { 
    throw e; 
    } 
}); 

あなたのハンドラにerror methodをオーバーライドし、あなたが合うように作用することにより、検証エラーを処理:SAXParserFactoryにスキーマを設定し、上記のJava 5またはを想定し

答えて

3

+0

パーサーは 'schemaFactory(newSchema(...)) 'で設定したものではなく、xmlファイル内で定義されたスキーマを使用しているようです。 – tangens

+1

これは私が見る動作ではありません(パーザは、ドキュメントに設定されている場合でも、常に工場で設定されたスキーマに対して検証します)。サンプル文書/コードがなければ、問題を特定することは困難です。 – McDowell

関連する問題