質問

私は、誰かが私のXML検証コードをもう一度与えて、私がそれを正しくやっているかどうかを見ることができるかどうか疑問に思っていました。これが問題の原因となっているコードの一部です...

SAXParserFactory factory = SAXParserFactory.newInstance();

SchemaFactory schemaFactory = SchemaFactory
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

// *** CODE FAILS ON THE BELOW LINE **/
factory.setSchema(schemaFactory
    .newSchema(new Source[] { new StreamSource(schemaStream) }));

SAXParser parser = factory.newSAXParser();

SAXReader reader = new SAXReader(parser.getXMLReader());
reader.setValidation(false);
reader.setErrorHandler(new ResultProducingErrorHandler());
reader.read(content);

上記のコードを実行するたびに、次の行に沿ってエラーが表示されます。

src-resolve: Cannot resolve the name 'ns:myStructure' to a(n) 'type definition' component.

エラーメッセージに記載されている要素はすべて、<!> lt; xs:import / <!> gt;の呼び出しを介してスキーマにインポートされた要素です。スキーマは、 W3C XML Schema Validator を介して正常に検証されるようです。

>

これらの各スキーマを個別に含める必要がありますか、それともJavaがこれらの追加スキーマも取得して取得するのに十分なほどスマートですか? newSchema呼び出しに渡された配列にそれらを追加しようとしましたが、違いはありませんでした。

スキーマへのリンクを提供することはできないと思うので、コードが少なくとも許容できるように見えるかどうかについては、本当に「はい」または「いいえ」を探しています。

役に立ちましたか?

解決

xs:importステートメントが、アプリケーションの現在のディレクトリから到達可能なパスを指していることを確認します。現在のディレクトリは、あなたが思っている通りではないかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top