DocumentBuilder.parse での DTD 参照の無視
外部 DTD (文書型定義) を参照する XML ファイルを解析するときに、次のような問題が発生する可能性があります。 DTD が利用できない場合、または DTD に対して検証したくない場合は、エラーが発生します。 DTD 参照を無視してファイルを解析するには、次の手順に従います:
解決策:
DTD 検証を無効にするように DocumentBuilderFactory を構成します:
<code class="java">DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // Disable validation dbf.setValidating(false); // Disable namespace awareness (optional) dbf.setNamespaceAware(false); // Disable specific features that load DTDs dbf.setFeature("http://xml.org/sax/features/namespaces", false); dbf.setFeature("http://xml.org/sax/features/validation", false); dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false); dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);</code>
DocumentBuilderFactory が構成されたら、DocumentBuilder の作成とファイルの解析に進むことができます。
<code class="java">DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(f);</code>
DTD 検証と関連機能を無効にすると、パーサーは外部 DTD への参照を無視し、XML ファイルの解析を続行します。エラーを発生させずに。このソリューションは、データ検証に DTD に依存する場合など、すべてのシナリオに適しているわけではないことに注意することが重要です。
以上がJava で外部 DTD 参照を無視して XML ファイルを解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。