2016-07-27 3 views
0

Я использовал парсер DOM раньше, поместил DTD-файл в проект, DOM-код мог обнаружить сам файл DTD и проанализировать файл на основе правил. Пока я передаю синтаксический анализатор SAX, кажется, что САКС-анализатор не смог обнаружить сам файл DTD без установки. Есть некоторые должности, упомянутые для использования resolveEntity(), в то время как я не мог понять очень хорошо. Может ли кто-нибудь помочь мне решить эту проблему, чтобы загрузить локальный файл DTD в мой Java-код простым способом (в eclipse без CMD)?SAX парсер загружает файл DTD

Если кто-нибудь может привести пример кода, это лучший вариант.

ответ

0

Я отправляю решение, которое работает, и я взял данные из документации SAX. Я использовал образец DTD и XML из W3 Schools для того же (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(); 
     } 

    }