忽略DocumentBuilder.parse 中的DTD 引用
解析引用外部DTD(文件類型定義)的XML 檔案時,您可能會遇到如果DTD 不可用或您不希望對其進行驗證,則會出現錯誤。要在忽略DTD 引用的情況下解析文件,請按照以下步驟操作:
解決方案:
配置DocumentBuilderFactory 以禁用DTD 驗證:
<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 中解析 XML 檔案並忽略外部 DTD 參考?的詳細內容。更多資訊請關注PHP中文網其他相關文章!