2016-07-27 33 views
0

我以前使用過DOM解析器,將DTD文件放在項目下,DOM代碼可以檢測DTD文件本身並根據規則解析文件。 當我轉移到SAX解析器時,似乎SAX解析器無法檢測到DTD文件本身而未進行設置。有一些帖子提到使用resolveEntity(),但我無法理解。任何人都可以幫助我解決這個問題,以簡單的方式加載本地DTD文件到我的java代碼(在沒有CMD的eclipse中)?SAX解析器加載DTD文件

如果任何人都可以給出一個代碼示例,它是最好的。

回答

0

我發佈了一個可以工作的解決方案,我已經從SAX文檔中獲得了輸入。我已經使用了來自W3學校的示例DTD和XML(http://www.w3schools.com/xml/xml_dtd.asp),如果它在單獨的文件中,則不需要DOCTYPE,因此從DTD中刪除了一行。不知道它是否是你想要的樣品,希望它以某種方式幫助!

public static void main(String[] args) { 
     try { 
      SAXParserFactory factory = SAXParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      factory.setValidating(true); 

      XMLReader reader = factory.newSAXParser().getXMLReader(); 
      reader.parse(new InputSource(new FileInputStream("C:\\DevelopmentTools\\3.CODE\\SAX-XML.txt"))); 
      reader.setEntityResolver(new EntityResolver() { 

       @Override 
       public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { 
        // TODO Auto-generated method stub 
        if (systemId == null) { 
         systemId = "C:\\DevelopmentTools\\3.CODE\\99.WORKSPACE\\Note.dtd"; 
        } 
        InputSource result = null; 
        result = new InputSource(systemId); 
        return result; 
       } 
      }); 

     } catch (ParserConfigurationException e) { 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    }