簡體   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