繁体   English   中英

如果模式可用,Java将忽略DTD进行验证

[英]java ignore the DTD for validation if a schema is available

当文档具有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模式进行验证。

问题是DTD验证只能在解析时执行,而在此之前我不知道文档是否具有对DTD或XSD的内部引用。

当然可以防止将DTD用于验证,但是要防止将其用于实体扩展(因此被读取)并不是那么容易。 如果要防止它被完全读取,并且知道这不会对实体扩展造成问题,则可以为解析器提供EntityResolver,该实体将DTD替换为虚拟对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM