だから私は大量のXMLファイルを持っています。何年もの間、それらを書いている人が手作業で行っていたため、エラーが自然に発生していたため、問題が発生していました。それらを検証し、これらの XML ファイルを使用しようとしたときに何が問題なのかについてフィードバックを提供する時期が来ました。
SAX パーサーを使用して、エラーのリストを取得しています。
以下は私のコードです
BookValidationErrorHandler errorHandler = new BookValidationErrorHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
SchemaFactory schemaFactory =
SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
factory.setSchema(schemaFactory.newSchema(
new Source[] {new StreamSource("test.xsd")}));
javax.xml.parsers.SAXParser parser = factory.newSAXParser();
org.xml.sax.XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(errorHandler);
reader.parse(new InputSource("bad.xml"));
最初の 2 つのエラーは常に次のとおりです。
行番号: 2: ドキュメントが無効です: 文法が見つかりません。行番号: 2: ドキュメント ルート要素「credits」は、DOCTYPE ルート「null」と一致する必要があります。
チェックが必要なこれらの何千もの XML ファイルを編集することはできません。
これを防ぐためにソースの前に簡単に追加できるものはありますか? これらの DTD 関連のエラーを無視するようにパーサーに指示する方法はありますか? 文法が何を意味するのかさえわかりません。2つ目の意味はなんとなくわかります。