2016-07-27 18 views
0

Ich habe den DOM-Parser zuvor verwendet, legen Sie die DTD-Datei unter dem Projekt, der DOM-Code könnte die DTD-Datei selbst erkennen und analysieren Sie die Datei basierend auf den Regeln. Während ich auf den SAX-Parser übersetze, scheint der SAX-Parser die DTD-Datei selbst nicht zu erkennen, ohne sie zu setzen. Es gibt einige Posts, die erwähnt werden, um resolveEntity() zu verwenden, während ich nicht sehr gut verstehen konnte. Könnte jemand mir helfen, dieses Problem zu lösen, um eine lokale DTD-Datei auf einfache Weise in meinen Java-Code zu laden (in Eclipse ohne CMD)?SAX-Parser laden Sie die DTD-Datei

Wenn jemand ein Codebeispiel geben könnte, ist es das Beste.

Antwort

0

Ich poste eine Lösung, die funktioniert, und ich habe Eingaben von SAX-Dokumentation genommen. Ich habe die Beispiel-DTD und XML von W3 Schulen für die gleiche verwendet (http://www.w3schools.com/xml/xml_dtd.asp), der DOCTYPE wird nicht benötigt, wenn es in einer separaten Datei daher diese eine Zeile aus der DTD entfernt. Nicht sicher, ob es die Probe ist, die Sie wollten, hoffe, dass es in irgendeiner Weise hilft!

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(); 
     } 

    }