2016-07-27 2 views
0

DOM 파서를 사용하기 전에 DTD 파일을 프로젝트에 두었습니다. DOM 코드는 DTD 파일 자체를 감지하고 규칙을 기반으로 파일을 구문 분석 할 수 있습니다. SAX 파서로 전송하는 동안 SAX 파서가 설정하지 않고 DTD 파일 자체를 감지하지 못했던 것 같습니다. resolveEntity()을 사용하는 일부 게시물이 있지만 잘 이해할 수 없습니다. 아무도 나를이 문제를 해결할 수있는 간단한 방법으로 내 Java 코드에 로컬 DTD 파일을로드 할 (CMD없이 일식)?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(); 
     } 

    } 
관련 문제