当文档有XSD架构可用时,是否可以忽略内部DTD进行验证?
如果源文档中未指定架构,则应使用DTD进行验证。
以下是配置解析器的方法。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(true);
factory.setFeature("http://apache.org/xml/features/validation/dynamic", true);
factory.setSchema(schemaFactory.newSchema());
builder.setErrorHandler(errorHandler);
我使用“动态”功能使解析器仅在DTD执行时才执行DTD验证 指定。
我根本无法摆脱DTD验证,只有在源XML文档具有XSD架构时我才需要忽略它。
有时,DTD声明仅用于声明DTD实体,而模式引用用于针对W3C XML Schema进行验证。
问题是DTD验证只能在解析时执行,在此之前我不知道文档是否具有对DTD或XSD的内部引用。
答案 0 :(得分:0)
当然可以防止DTD用于验证,但是防止它被用于实体扩展(因此被读取)并不容易。如果你想防止它被完全读取,并且如果你知道这不会导致实体扩展的问题,你可以为解析器提供一个EntityResolver,用一个虚拟替换DTD。