2013-07-24 65 views
2

我有一個引用了dtd文件的xml文件。告訴JAXP DTD文件的路徑

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE varman SYSTEM "referenced.dtd"> 
... 

我設法與JAXP閱讀本文件,但只有當referenced.dtd位於同一文件夾中的XML文件。否則,我會得到一個例外,即無法加載dtd文件。我無法找到插入處理程序或任何地方來解決這個缺失的資源。請給我啓示!

+0

你使用SAX或DOM?請注意,除非使用某個實體解析器(如目錄系統),否則您將無法根據實際發現的位置來分配對DTD的訪問權限。您可以使用絕對URI並使DTD在該位置可用。 – lkuty

回答

1

使用屬性設置,以允許外部路徑:

添加錯誤處理程序來捕獲不支持的屬性:

public boolean isNewPropertySupported() { 
     try { 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser parser = spf.newSAXParser(); 
      parser.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", "file"); 
     } catch (ParserConfigurationException ex) { 
      fail(ex.getMessage()); 
     } catch (SAXException ex) { 
      String err = ex.getMessage(); 
      if (err.indexOf("Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.") > -1) 
      { 
      //expected, jaxp 1.5 not supported 
      return false; 
      } 
     } 
     return true; 
    }