5

Xerces-J を使用して XML ドキュメントを検証しようとしています。

関連する XSD ファイルまたは DTD ファイルをバリデーターに取得して解決してもらいたい (schemalocation、nonamespaceschemalocationa、および DOCTYPE 参照を使用)。これらのリソースの読み込みは、Resolver クラスに委任できるようです。

ただし、私が見たすべてのサンプルは、スキーマからバリデーターを作成するところから始まります。

これを逆に実行して、xerces に XML ドキュメントを検証するように依頼し、必要なものをロードさせることは可能ですか? または、最初に XML ファイルを解析してスキーマ参照を探し、それらをロードしてから、スキーマからバリデータを作成する必要があります。 ?

理想的な世界では、バリデータは xsd 1.1 もサポートします

4

1 に答える 1

3

<!DOCTYPE 宣言またはスキーマ属性を検索するときに使用する EntityResolver をパーサーに提供します。最も一般的なエンティティ リゾルバーはカタログ ファイルを使用します。カタログ ファイルは、基本的に XML ファイルまたはテキスト ファイルであり、物理ファイルへのパブリック ID、システム ID、および URI のディクショナリを定義します。org.apache.xml.resolverパッケージを参照してください。ただし、独自のEntityResolver実装を提供することもできます。

CatalogResolver resolver = new CatalogResolver();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true);
dbf.setFeature("http://apache.org/xml/features/validation/dynamic", true);
DocumentBuilder parser = dbf.newDocumentBuilder();
parser.setEntityResolver(resolver);
Document doc = parser.parse(someFile);
于 2013-08-22T16:35:43.710 に答える