使用 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中文网其他相关文章!