如果架构可用,则java忽略DTD以进行验证

时间:2013-04-08 06:40:22

标签: java xml validation xsd dtd

当文档有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的内部引用。

1 个答案:

答案 0 :(得分:0)

当然可以防止DTD用于验证,但是防止它被用于实体扩展(因此被读取)并不容易。如果你想防止它被完全读取,并且如果你知道这不会导致实体扩展的问题,你可以为解析器提供一个EntityResolver,用一个虚拟替换DTD。