使用DocumentBuilder.parse 忽略DTD 引用
解析引用外部DTD(文檔類型聲明)的XML 文件時,可能會出現錯誤如果DTD 不可用或不可存取。若要克服此問題並在解析期間忽略 DTD 引用,請在 DocumentBuilderFactory 上設定各種功能:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); dbf.setNamespaceAware(true); 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); DocumentBuilder db = dbf.newDocumentBuilder();
停用這些功能後,DocumentBuilder 將忽略 DTD 引用並繼續解析 XML。
特定功能選項可能會因解析器實作而異。例如,Xerces2 解析器文件提供了有關停用 DTD 載入和驗證的更多見解。透過設定這些功能,您可以解析 XML 文件,而無需外部 DTD,從而確保最大限度地減少處理錯誤。
以上是使用 DocumentBuilder.parse 解析 XML 檔案時如何忽略 DTD 參考?的詳細內容。更多資訊請關注PHP中文網其他相關文章!