1
當文檔的XSD模式可用時,可以忽略用於驗證的內部DTD嗎?如果模式可用,java忽略用於驗證的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和模式重疊,但如您所示,DTD另外提供實體。您可以編寫自己的EntityHandler,並保留所有(遞歸包含的)DTD本地。提高速度性能。 – 2013-04-08 06:53:29
是的,但我需要以某種方式查看文檔是否具有XSD。如果不是,則應使用DTD進行驗證。 – RabbitObject 2013-04-08 07:00:36